垂直条文字如何确定python中的正式正则表达式?

时间:2011-05-13 07:25:31

标签: python regex

根据python doc,竖线文字用作'或'运算符。它匹配A | B,其中A和B可以是任意RE。

例如,如果正则表达式如下: ABC | DEF,它匹配这些字符串:

“ABC”,“DEF”

但是,如果我想匹配字符串如下:

“ABCF”,“ADEF”

也许我想要的是像 A(BC)|(DE)F 这意味着:

  • 首先匹配“A”,
  • 然后字符串“BC”或“DE”,
  • 然后是char“F”。

我知道上面的表达是不对的,因为括号在正则表达式中有其他含义,只是为了表达我的想法。

谢谢!

2 个答案:

答案 0 :(得分:7)

这些将起作用:

A(BC|DE)F
A(?:BC|DE)F

不同之处在于生成的组数:1表示第一个,0表示第二个。

您的ABCDEF匹配2组,其中一组不包含任何内容,另一组包含匹配的片段(BCDE)。

答案 1 :(得分:3)

Python regexp(和一般的perl兼容的regexp)中的括号和正式正则表达式中的括号之间的唯一区别是,在Python中,parens存储它们的结果。括号内的正则表达式匹配的所有内容都存储为“子匹配”或“组”,您可以使用groupre.match返回的匹配对象上的re.search方法进行访问,或者re.finditer。它们也用于反向引用,这是Python RE / PCRE的一个功能,它违反了正常的正则表达式规则,而且你可能并不关心。

如果你不关心整个子匹配提取协议,可以使用像这样的parens。如果你关心,有一个非捕获版本的parens与正式正则表达式完全相同:(?:...)而不是(...)

official docs

中描述了这个以及更多内容