检索re.findall不匹配的子串

时间:2016-01-15 10:18:00

标签: python regex

假设我们有一个正则表达式exp,并希望在字符串s中找到所有出现的模式。这可以通过

轻松完成
import re
m=re.findall(exp,s)

但现在我们也希望在比赛之间拥有所有子串。

问题的第一部分是:最好/最简单的方法是什么?

问题的第二部分是:是否可以通过字符串s在一次扫描中获得匹配,即没有匹配正则表达式两次?< / p>

1 个答案:

答案 0 :(得分:1)

对于第一部分,我认为re.split适用于此:

>>> re.split("a(?=b)", "ababba")
['', 'b', 'bba']

作为第2部分的解决方案,我认为您可以做到这样的事情:

exp2 = re.compile(exp)
unmatched = []
prev_match_end = 0
for match in exp2.finditer(s):
    unmatched.append(s[prev_match_end: match.start()])
    prev_match_end = match.end()

# Deal with unmatched text after last match:
unmatched.append(s[prev_match_end:])

现在你拥有所有匹配和不匹配的文字。