2024-06-26 14:28:30 发布
网友
给定字符串bcacaca。正则表达式模式b?(.a)*应该在整个字符串上匹配。但是,对re.findall('b?(.a)*', 'bcacaca')的调用将返回['ca', '']。它似乎只返回单个组的匹配结果。这是怎么回事
b?(.a)*
re.findall('b?(.a)*', 'bcacaca')
['ca', '']
我对findall的理解是,它应该返回正则表达式模式的所有非重叠实例。在这种情况下,它应该返回['bcacaca', '']
findall
['bcacaca', '']
改用'(b(.a)*)'作为正则表达式模式。在下面的示例中需要result[0]
'(b(.a)*)'
result[0]
import re result = re.findall('(b(.a)*)', 'bcacaca') result
输出:
[('bcacaca', 'ca')]
正如@Nick提到的,这里可以使用非捕获组,如下所示。考虑下面的场景。有关分步说明,请参见下一节。此外,我鼓励您使用以下资源:regex101.com
## Define text and pattern text = 'bcacaca dcaca dbcaca' pattern = 'b?(?:.a)*' ## Evaluate regex result = re.findall(pattern, text) # output # ['bcacaca', '', '', 'caca', '', '', 'bcaca', ''] ## Drop empty strings from result result = list(filter(None, result)) # output # ['bcacaca', 'caca', 'bcaca']
改用
'(b(.a)*)'
作为正则表达式模式。在下面的示例中需要result[0]
输出:
更好的选择-使用非捕获组
正如@Nick提到的,这里可以使用非捕获组,如下所示。考虑下面的场景。有关分步说明,请参见下一节。此外,我鼓励您使用以下资源:regex101.com
使用非捕获组的说明
参考资料
相关问题 更多 >
编程相关推荐