正则表达式摆脱捕获组

时间:2017-05-17 20:13:31

标签: python regex capturing-group

我有以下正则表达式: (?i)p\w+@t(-)?\w+(-\w+)?(\.\w+)?\.at匹配

等数据
papFoo@t-bar.at
PapBar@tfoo.ring.at

如何重写此正则表达式以使用非记录组?

  • [?i]p\w+@t[-]?\w+[-\w+]?[\.\w+]?\.at将不再匹配任何结果
  • (?:?i)p\w+@t(?:-)?\w+(?:-\w+)?(?:\.\w+)?\.at同样在这里

即。我应该将(?i)p写为?ip,但在https://regex101.com上,我只会在尝试将(?:?i)p\w+@t(?:-)?\w+(?:-\w+)?(?:\.\w+)?\.at用于非捕获组时出错。

最后python3应该评估正则表达式。

2 个答案:

答案 0 :(得分:5)

第一个“组”(?i)不是捕获组,它是一个标志集,打开表达式的不区分大小写。非捕获版本应为:

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

哪个匹配正确。

答案 1 :(得分:0)

您可以使用

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

请参阅a demo on regex101.com 正如其他人所指出的,(?i)是一个内联修饰符,(?s)(单行)或(?m)(多行)。