正则表达式中的组的枚举

时间:2017-02-26 02:17:22

标签: python regex

我正在学习Python中的正则表达式,但无法根据.group()找出import re string = 'suzi sabin joe brandon josh' print(re.search(r'^.*\b(suzi|sabin|joe|brandon|josh)\b.*$', string).group(0)) # output : suzi sabin joe brandon josh print(re.search(r'^.*\b(suzi|sabin|joe|brandon|josh)\b.*$', string).group(1)) # output : josh 中的数字。

这是我的代码:

-1

我想知道

  • 为什么只有组(1)而不是组(1-5)?
  • 为什么josh被分类为组(1)?

我很感谢任何建议。

1 个答案:

答案 0 :(得分:0)

当你拨打group(0)时,你会得到整个匹配的文本,这是整个字符串,因为你的模式从字符串的开头到结尾匹配。

正则表达式匹配所有内容时,只有捕获一个名称(在第1组中,因为历史原因,正则表达式从1开始计算)。因为第一个.*是贪婪的(它试图匹配尽可能多的文本),它会吞噬早期的名称,捕获的名称是最后一个,"josh"(和最后{{1}匹配一个空字符串)。捕获的名称是您拨打.*时获得的名称。

如果您想单独捕获每个名称,则需要采取不同的方式。可能这样的事情会起作用:

group(1)

这将打印列表print(re.findall(r'\b(suzi|sabin|joe|brandon|josh)\b', string)) 。每个名称将以与输入字符串中显示的顺序相同的顺序出现在输出中,这不一定与它们在模式中的顺序相同。这可能不会完全符合您的要求,因为它会跳过任何不是您正在寻找的名称之一的文本(而不是无法匹配任何内容)。