'组和re模块中的群组有什么区别?'

2024-05-13 20:50:12 发布

您现在位置:Python中文网/ 问答频道 /正文

这里是:

import re
>>>s = 'abc -j k -l m'
>>>m = re.search('-\w+ \w+', s)
>>>m.groups()
()
>>> m.group(0)
'-j k'

为什么groups()什么也没有给我,但是group(0)产生了一些?有什么区别?

跟进

代码如下

>>>re.findall('(-\w+ \w+)', s)
['-j k', '-l m', '-n o']

findall可以得到所有的-\w+ \w+子字符串,但是请看这个:

>>>m = re.search('(-\w+ \w+)+', s)
>>>m.groups()
('-j k',)

为什么不能search给我所有的子字符串?

再次跟进

如果s = 'abc -j k -l m -k o,并且

>>>m = re.search(r'(-\w+ \w+ )+', s)
>>>m.groups()
('-l m ',)      # why just one substring?
>>>m.group(0)
'-j k -l m '    # as I expected

Tags: 字符串代码importresearchasgroupsubstring
3条回答

groups()只返回正则表达式中任何显式捕获的组(在正则表达式中用(圆括号)表示),而group(0)返回与正则表达式匹配的整个子字符串,而不管表达式是否有任何捕获组。

正则表达式中的第一个显式捕获由group(1)表示。

后续编辑:

Why can't search give me all the substrings?

search()将只返回与输入字符串中的模式的第一个匹配。

regex没有匹配组,由parens((...))表示。

让我举个小例子来解释

>>> var2 = "Welcome 44 72"
>>> match = re.search(r'Welcome (\d+) (\d+)',var2)
>>> match.groups()
('44', '72')
>>> match.groups(0)
('44', '72')
>>> match.groups(1)
('44', '72')
>>> match.group(0)
'Welcome 44 72'
>>> match.group(1)
'44'

解释:groups()是一个元组类型,它具有与正则表达式模式匹配的所有值。

groups(0)groups()groups(1)。。。。它只打印所有值

group()或group(0)->;它将给出整个字符串以及与正则表达式匹配的模式值。

组(1)将给出第一个模式匹配值

组(2)将给出第二个模式匹配值。。。。

相关问题 更多 >