python正则表达式是否遵循一般到特定匹配?



我有以下正则表达式:

test1|test123

这只匹配 test1 而不是 test123 - 我应该先指定更通用的吗?喜欢test123|test1

是的,实际上正则表达式世界中的 X|Y 表示应用于每个字符的 X 或(不是 X 和 Y(。所以test1|test123永远不会匹配test123,因为它已经与test1匹配。

stri = "abcd"
regex1 = "(?P<group1>ab)|(?P<group2>cd)"
regex2 = "(?P<group1>ab).*(?P<group2>cd)"
y = re.match(regex1,stri)
if y:
if y.group("group1"):
print y.group("group1")
if y.group("group2"):
print y.group("group2")

第一个正则表达式 (regex1( 将只匹配 group1,因为 y 实例只能从两种情况下获取一个正则表达式匹配项,显然它将采用第一个匹配项。第二个 (regex2( 可以匹配两个组,因为这将是组 1 和组 2 的单个匹配对象。

如果你想用'|'运算符本身捕获这两个组,那么你可以这样做

regex1 = re.compile("(?P<group1>ab)|(?P<group2>cd)")
for y in regex1.finditer(stri):
if y.group("group1"):
print y.group("group1")
if y.group("group2"):
print y.group("group2")

相关内容

最新更新