re.search()只给2组,但应该给5

时间:2019-01-17 03:44:02

标签: python regex

Pythex.org告诉我应该获得5场比赛,但是我尝试的每种方式都不能超过3场。我已经在互联网上搜索了有关匹配对象和匹配对象的文档,使用了help()我无法弄清楚。

>>> z="this is x and this is x and also this is x and x x"
>>> m = re.search('(x+)',z)
>>> m.group(0,1)
('x', 'x')
>>> m.group(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: no such group


>>> m = re.search('(x)',z)
>>> m.group(0,1)
('x', 'x')
>>> m.group(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: no such group

>>> m = re.search(r'(x)',z)
>>> m.group(0,1)
('x', 'x')
>>> m.group(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: no such group

我还尝试在最后的x之间插入单词,但这也不起作用。

1 个答案:

答案 0 :(得分:0)

在Python中,re.search()仅返回句子的第一个匹配项,之后不返回任何内容。

您应该在代码中试用re.findall(x)

请始终记住,匹配项(group(0))的第0个索引会返回已匹配的完整字符串,因此看起来有两个x已匹配,但第一个实际上只是与整个正则表达式匹配的字符串。

使用group(1)时,仅返回第一个括号()中的文本,该文本恰好与group(0)相同。


TL; DR

使用re.search()仅查找第一个匹配项,并使用re.findall()提取多个匹配项。