2017-01-26 2 views
1

Добрый день, просто хочу извиниться за мой английский - факт, что я использую переводчик Google. Покажите, как это регулярное выражение в Python не связано с индексом с именем group 1 и группой с именем ID111?Регулярное выражение в python

Это регулярное выражение я использую:
r'(^RU)?(?P<ID111>(?(1).+|[\d]{5}))'

Вот строка, где выполняется поиск:
RU Д-SK.ПК05.В.02695.jpeg (начинается с ТС)

Вот ссылка на удобный сервис для проверки с помощью уже подвергается данные регулярное выражение:
https://regex101.com/r/mDh0kZ/1

Дело в том, что если строка, в которой мы искали, возвращает true, тогда группа 'ID111' пропускает всю строку по назначению и только то, что приходит после группы индекса 1. Я хочу решить ее только с помощью регулярного выражения.

Я был бы вам очень признателен за любую помощь.

+4

Итак, что не работает и как оно должно работать? Обратите внимание, что вы можете задать вопрос по-русски [здесь] (http://ru.stackoverflow.com/questions/tagged/%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1% 8F% D1% 80% D0% BD% D1% 8B% D0% B5-% D0% B2% D1% 8B% D1% 80% D0% B0% D0% B6% D0% B5% D0% BD% D0% B8 % D1% 8F). –

+0

@WiktorStribizew Необходимо, чтобы на рабочем блоке '(1) + |? . 'Показывает 'RU D-SK.PK05.V.02695.jpeg (начинается с TC)', а не 'D-SK.PK05.V.02695.jpeg (начинается с TS)' –

+0

Я не уверен, что вы хотите попасть в конец, но попробуйте 'r '^ RU. + | \ d {5}'' ([demo] (https://regex101.com/r/mxWqdG/3)). Я думаю, вы хотите использовать его с 're.search', проверить, есть ли совпадение, а затем получить значение' match.group() '. –

ответ

1

Как мне видно, условное условие не требуется, все, что вам нужно, это использование двух альтернатив: 1) соответствие строки с начала, если она начинается с RU до последних ., или 2) соответствует 5-значный кусок.

Таким образом, использовать

r'(?P<ID111>^RU.*(?=\.)|\d{5})' 

Смотрите Python regex demo

Детали:

  • ^RU - это RU в начале строки
  • .*(?=\.) - все 0+ символов кроме символов разрыва строки до последнего . (исключая его)
  • | - или
  • \d{5} - 5 цифр (обратите внимание, что в соответствии с 5-значным куском не заключенный с другими цифрами, используйте (?<!\d)\d{5}(?!\d)).
+0

Just FYI: '(? = \ .. *)' = '(? = \.)' –

Смежные вопросы