竖线字面量如何确定Python中的正规表达式?
根据Python的文档,竖线符号(|)用作“或”运算符。它可以匹配A|B,其中A和B可以是任意的正则表达式。
举个例子,如果正则表达式是这样:
ABC|DEF,它可以匹配像这样的字符串:
"ABC", "DEF"
但是如果我想匹配这样的字符串:
"ABCF", "ADEF"
也许我想要的是类似A(BC)|(DE)F的东西,这意味着:
- 首先匹配"A",
- 然后是字符串"BC"或"DE",
- 最后是字符"F"。
我知道上面的表达式不正确,因为括号在正则表达式中有其他含义,只是想表达我的想法。
谢谢!
2 个回答
3
在Python的正则表达式中,括号和正式正则表达式中的括号唯一的区别是,Python中的括号会保存匹配的结果。也就是说,括号里面匹配到的内容会被存储为一个“子匹配”或者“组”,你可以通过匹配对象上的group
方法来访问这些内容,这个匹配对象是由re.match
、re.search
或re.finditer
返回的。括号还可以用于回溯引用,这是Python正则表达式的一种特性,和正常的正则表达式规则有些不同,可能你对此并不太在意。
如果你不在乎提取子匹配的这些细节,像这样使用括号是完全可以的。如果你在意这些内容,那么有一种不捕获的括号用法,和正式的正则表达式是一样的:用(?:...)
代替(...)
。
更多信息可以查看官方文档
7
这些方法都可以用:
A(BC|DE)F
A(?:BC|DE)F
它们的区别在于生成的组数:第一个方法生成1组,第二个方法生成0组。
你的方法会匹配到ABC
或者DEF
,总共会有2组,其中一组是空的,另一组则包含匹配到的部分(BC
或者DE
)。