Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式组()的工作原理_Python_Regex - Fatal编程技术网

Python正则表达式组()的工作原理

Python正则表达式组()的工作原理,python,regex,Python,Regex,有人能解释一下为什么下面的每一张照片会给出不同的结果吗?谢谢 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)) m.group()和m.group(0)应该是相同的 m.group(1)只提供第一对括号内的匹配项 编辑以澄清什么是“匹

有人能解释一下为什么下面的每一张照片会给出不同的结果吗?谢谢

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))
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

m.group()
m.group(0)
如果存在匹配项,只需返回整个字符串。 它们相同的原因是函数的默认值为零:

def group(num=0):
至于比赛:
m.group(1),m.group(2).
返回匹配的组(在您的示例中,只有一个)


有关matche组的更多信息,请参见

您好,是的,我可以看到,但在python文档中看不到任何解释。“整个字符串”和“匹配组”之间的区别是什么?您可以阅读查找:
\number
进一步,请参阅上面答案中的更新。是的,我看到了。我在寻找更全面的答案。组()和组(1)之间的差异。group()和group(1)都应该打印相同的结果,因为这里只有一个匹配的字符串。那么为什么group()和group(1)的行为不同呢?现在就明白了。还有一个问题。如果组(1)只考虑括号内的内容,那么为什么组(1)没有给出s=“-eh5ello”的结果,因为这不匹配。你想要一个破折号,一个字母,一个数字,还有更多的字母;但是你有一个破折号,两个字母,一个数字和更多的字母。