竖线字面量如何确定Python中的正规表达式?

6 投票
2 回答
1373 浏览
提问于 2025-04-16 17:33

根据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.matchre.searchre.finditer返回的。括号还可以用于回溯引用,这是Python正则表达式的一种特性,和正常的正则表达式规则有些不同,可能你对此并不太在意。

如果你不在乎提取子匹配的这些细节,像这样使用括号是完全可以的。如果你在意这些内容,那么有一种不捕获的括号用法,和正式的正则表达式是一样的:用(?:...)代替(...)

更多信息可以查看官方文档

7

这些方法都可以用:

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

它们的区别在于生成的组数:第一个方法生成1组,第二个方法生成0组。

你的方法会匹配到ABC或者DEF,总共会有2组,其中一组是空的,另一组则包含匹配到的部分(BC或者DE)。

撰写回答