我有以下正则表达式:
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")