регулярное выражение избавиться от групп захвата


У меня есть следующее регулярное выражение: (?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 2

2 ответа:

Первая "группа", (?i), не является группой захвата, это набор флагов, включающих нечувствительность к регистру для выражения. Версия без захвата должна быть:

(?i)p\w+@t-?\w+(?:-\w+)?(?:\.\w+)?\.at

Который соответствует правильно.

Вы можете использовать

(?i)p\w+@t(?:-)?\w+(?:-\w+)?(?:\.\w+)?\.at

См. демо на экране regex101.com.
Как указывали другие, (?i) является встроенным модификатором, как и (?s) (однострочный) или (?m) (многострочный).