我們假設我們有一個正則表達式exp
,並希望在字符串s
中查找此模式的所有匹配項。這可以很容易地完成與檢索與re.findall不匹配的子字符串
import re
m=re.findall(exp,s)
但現在我們還想要所有的匹配之間的子串。
問題的第一部分是:什麼是最好/最簡單的方法來做到這一點?
問題的第二部分是:是否有可能獲得比賽和中,中間人通過串s
一次掃描,也就是沒有正則表達式匹配的兩倍?
我們假設我們有一個正則表達式exp
,並希望在字符串s
中查找此模式的所有匹配項。這可以很容易地完成與檢索與re.findall不匹配的子字符串
import re
m=re.findall(exp,s)
但現在我們還想要所有的匹配之間的子串。
問題的第一部分是:什麼是最好/最簡單的方法來做到這一點?
問題的第二部分是:是否有可能獲得比賽和中,中間人通過串s
一次掃描,也就是沒有正則表達式匹配的兩倍?
在第一部分,我認爲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:])
現在你有所有的比賽和無與倫比的文字。
爲什麼不使用're.split'?而且不要在1次手術中這樣做。正則表達式旨在匹配,而不是*不匹配*。 –