Python regex group() 的工作原理解析
有人能解释一下为什么下面每个打印的结果都不一样吗?谢谢。
import re
s = "-h5ello"
m = re.match("-\w(\d\w+)", s)
print ' m.group(): ',(m.group())
print ' m.group(0): ',(m.group(0))
print ' m.group(1): ',(m.group(1))
2 个回答
1
m.group()
和 m.group(0)
如果找到了匹配的内容,都会返回整个字符串。它们之所以一样,是因为这个函数默认返回的是零。
def group(num=0):
至于匹配的部分:
m.group(1), m.group(2)...
会返回匹配到的组(在你的例子中,只有一个组)。
关于匹配组的更多信息,可以在 文档 中找到。
1
m.group()
和 m.group(0)
是一样的,结果是相同的。
m.group(1)
只会给你第一个括号里面匹配到的内容。
补充说明 什么是“匹配组”:
在正则表达式中,普通的括号叫做“捕获”。之所以叫这个名字,是因为它们可以把子匹配的内容捕获到捕获组里。想象一下:
import re
m = re.match(r'a(b)c(d(e)f)g', 'abcdefg')
print m.group()
# => 'abcdefg'
print m.groups()
# => ('b', 'def', 'e')
m.group(0)
,也就是 m.group()
,是整个匹配的结果。括号用来提取子匹配,第一个括号对对应 m.group(1)
,第二个对应 m.group(2)
,第三个对应 m.group(3)
。
在你的例子中,也有括号。它们并不包括 -\w
,所以你的 m.group(1)
里没有 -h
这个部分,它只包含 \d\w+
匹配到的内容,也就是 5ello
。