假设我们有一个正则表达式exp
,并希望在字符串s
中找到所有出现的模式。这可以通过
import re
m=re.findall(exp,s)
但现在我们也希望在比赛之间拥有所有子串。
问题的第一部分是:最好/最简单的方法是什么?
问题的第二部分是:是否可以通过字符串s
在一次扫描中获得匹配和,即没有匹配正则表达式两次?< / p>
答案 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:])
现在你拥有所有匹配和不匹配的文字。