re.findall()不返回所有匹配项?

时间:2018-08-30 04:00:01

标签: python regex

我有以下字符串:

This$#is% Matrix#  %!

我试图抓住在字母数字字符之间出现特殊符号/空格的子字符串。例如,我的目标是找到这两组子字符串:This$#is(特殊符号#,'This'和'is'之间的$)和is% Matrix(特殊符号%和'is'之间的空格)和“矩阵”)。

我的正则表达式findall如下:

match = re.findall(r'([\w]{1,})([\s\W]{1,})([\w]{1,})', temp)

它正在返回我:[('This', '$#', 'is')],而不是第二部分('is% Matrix')。我做错了什么吗?

如果我将字符串更改为'is%Matrix'并应用相同的正则表达式模式,则会得到:[('is', '% ', 'Matrix')]

1 个答案:

答案 0 :(得分:1)

您可以在希望有重叠匹配的部分上使用正向前瞻:

match = re.findall(r'([\w]{1,})([\s\W]{1,})(?=([\w]{1,}))', temp)

match变为:

[('This', '$#', 'is'), ('is', '% ', 'Matrix')]

演示:https://regex101.com/r/2PJmlX/1