我正在学习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
我想知道
我很感谢任何建议。
答案 0 :(得分:0)
当你拨打group(0)
时,你会得到整个匹配的文本,这是整个字符串,因为你的模式从字符串的开头到结尾匹配。
正则表达式匹配所有内容时,只有捕获一个名称(在第1组中,因为历史原因,正则表达式从1开始计算)。因为第一个.*
是贪婪的(它试图匹配尽可能多的文本),它会吞噬早期的名称,捕获的名称是最后一个,"josh"
(和最后{{1}匹配一个空字符串)。捕获的名称是您拨打.*
时获得的名称。
如果您想单独捕获每个名称,则需要采取不同的方式。可能这样的事情会起作用:
group(1)
这将打印列表print(re.findall(r'\b(suzi|sabin|joe|brandon|josh)\b', string))
。每个名称将以与输入字符串中显示的顺序相同的顺序出现在输出中,这不一定与它们在模式中的顺序相同。这可能不会完全符合您的要求,因为它会跳过任何不是您正在寻找的名称之一的文本(而不是无法匹配任何内容)。