регулярное выражение избавиться от групп захвата
У меня есть следующее регулярное выражение:
(?i)pw+@t(-)?w+(-w+)?(.w+)?.at
который соответствует данным типа
papFoo@t-bar.at
PapBar@tfoo.ring.at
Как я могу переписать это регулярное выражение, чтобы использовать некаптчурирующие группы?
-
[?i]pw+@t[-]?w+[-w+]?[.w+]?.at
больше не будет соответствовать никаким результатам -
(?:?i)pw+@t(?:-)?w+(?:-w+)?(?:.w+)?.at
то же самое здесь
То есть (?i)p
должно быть записано как ?ip
я думаю, но на https://regex101.com я получаю ошибки только при попытке использовать (?:?i)pw+@t(?:-)?w+(?:-w+)?(?:.w+)?.at
с некаптчуринговыми группами.
В конце концов python3 должен оценить регулярное выражение.
2 ответа:
Первая "группа",
(?i)
, не является группой захвата, это набор флагов, включающих нечувствительность к регистру для выражения. Версия без захвата должна быть:(?i)p\w+@t-?\w+(?:-\w+)?(?:\.\w+)?\.at
Который соответствует правильно.
Вы можете использовать
(?i)p\w+@t(?:-)?\w+(?:-\w+)?(?:\.\w+)?\.at
См. демо на экране regex101.com.
Как указывали другие,(?i)
является встроенным модификатором, как и(?s)
(однострочный) или(?m)
(многострочный).