根据python doc,竖线文字用作'或'运算符。它匹配A | B,其中A和B可以是任意RE。
例如,如果正则表达式如下: ABC | DEF,它匹配这些字符串:
“ABC”,“DEF”
但是,如果我想匹配字符串如下:
“ABCF”,“ADEF”
也许我想要的是像 A(BC)|(DE)F 这意味着:
我知道上面的表达是不对的,因为括号在正则表达式中有其他含义,只是为了表达我的想法。
谢谢!
答案 0 :(得分:7)
这些将起作用:
A(BC|DE)F
A(?:BC|DE)F
不同之处在于生成的组数:1表示第一个,0表示第二个。
您的ABC
或DEF
匹配2组,其中一组不包含任何内容,另一组包含匹配的片段(BC
或DE
)。
答案 1 :(得分:3)
Python regexp(和一般的perl兼容的regexp)中的括号和正式正则表达式中的括号之间的唯一区别是,在Python中,parens存储它们的结果。括号内的正则表达式匹配的所有内容都存储为“子匹配”或“组”,您可以使用group
,re.match
返回的匹配对象上的re.search
方法进行访问,或者re.finditer
。它们也用于反向引用,这是Python RE / PCRE的一个功能,它违反了正常的正则表达式规则,而且你可能并不关心。
如果你不关心整个子匹配提取协议,可以使用像这样的parens。如果你关心,有一个非捕获版本的parens与正式正则表达式完全相同:(?:...)
而不是(...)
。