Python正则表达式组搜索仅返回第一个匹配项

时间:2016-07-31 11:14:48

标签: python regex

我需要提取编号列表的内容。请检查以下网址:https://regex101.com/r/oS0yT5/1

string = @BarsAndMelody #3thingsthatmakeyousmile #1) @livingleondre #2) Leondre and Charlie #3) chocolate  ☺️   please notice me  it's my birthday

以下代码仅提取第一个匹配项:

p = re.compile("(?<=[#\s][\d][\)\.\:][\s])(.*?)(?=[#][\d][\)\.\:][\s])")
x = p.search(string)
x.group(1)

上面的代码返回第一个匹配:@livingleondre使用x.group(2)返回No such group error。 如上面给出的url所示,我如何提取该组的其他内容 期望的输出:@livingleondreLeondre and Charlie

1 个答案:

答案 0 :(得分:3)

您需要re.findall才能找到所有匹配项,而不仅仅是第一项:

string = "@BarsAndMelody #3thingsthatmakeyousmile #1) @livingleondre #2) Leondre and Charlie #3) chocolate  ☺️   please notice me  it's my birthday"
p = re.findall("(?<=[#\s][\d][\)\.\:][\s])(.*?)(?=[#][\d][\)\.\:][\s])",string)
print p[0]
print p[1]

此外,您可以将正则表达式简化为:

(?<=[#\s]\d[).:]\s)(.*?)(?=#\d[).:]\s)

由于不需要在[...]内转义任何内容,您可以在单个字符周围省略[...]