Python regex group() 的工作原理解析

-1 投票
2 回答
1274 浏览
提问于 2025-04-18 18:48

有人能解释一下为什么下面每个打印的结果都不一样吗?谢谢。

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

撰写回答