Почему регулярное выражение не совпадает, когда я добавляю группы? - PullRequest
3 голосов
/ 17 апреля 2009

У меня есть этот код регулярного выражения в python:

if re.search(r"\{\\fad|fade\(\d{1,4},\d{1,4}\)\}", text):
  print(re.search(r"\{\\fad|fade\((\d{1,4}),(\d{1,4})\)\}", text).groups())

text равен {\fad(200,200)}Épisode 101 : {\i1}The Ghost{\i0}\Nv. 1.03 и считывается из файла (не знаю, помогает ли это).

Возвращает следующее:

(None, None)

Когда я изменяю регулярное выражение в печати на r"\{\\fad\((\d{1,4}),(\d{1,4})\)\}", он возвращает правильные значения:

(200, 200)

Кто-нибудь может понять, почему условное fad|fade соответствует регулярному выражению в re.search, но не возвращает правильные значения групп в печати?

Спасибо.

Ответы [ 6 ]

6 голосов
/ 17 апреля 2009

Положите лишние символы вокруг выбора: re.search(r"{(?:\\fad|fade)\((\d{1,4}),(\d{1,4})\)}", text).groups()

Кроме того, экранирование {} скобок не является необходимым, оно просто бесполезно загромождает ваше регулярное выражение.

4 голосов
/ 17 апреля 2009

Скобка является частью ветви или, начинающейся с fade, поэтому она ищет "{fad" или "fade (...". Вам нужно сгруппировать часть fad | fade. Попробуйте:

r"\{\\(?:fad|fade)\(\d{1,4},\d{1,4}\)\}"

[Изменить] Причина, по которой вы попадаете в блок if, заключается в том, что регулярное выражение соответствует , но только потому, что оно обнаруживает, что оно начинается с "{\ fad". Однако эта часть матча не содержит групп. Вам нужно соответствовать части, которая определяет группы, если вы хотите захватить их.

2 голосов
/ 17 апреля 2009

Попробуйте это:

r"\{\\fade?\(\d{1,4},\d{1,4}\)\}"
1 голос
/ 17 апреля 2009

Попробуйте вместо этого:

r"\{\\fade?\((\d{1,4}),(\d{1,4})\)\}"

e? является необязательным e. То, как у вас есть, теперь соответствует {\fad или fade(0000,0000)}

1 голос
/ 17 апреля 2009

Я думаю, что ваш условный запрос ищет "\ fad" или "fade", я думаю, вам нужно переместить \ вне группы, если вы хотите искать "\ fad" или "\ fade".

0 голосов
/ 17 апреля 2009

Я не знаю Python-диалект регулярных выражений, но разве вам не нужно каким-то образом группировать «fad | fade», чтобы убедиться, что он не пытается найти «fad OR fade» (и т.д .. . "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...