所以這應該很容易,但我有點想念SO或Python文檔的答案。 我使用這個代碼:在Python中找到N個正則表達式的前N個事件
myregex.findall(source)
這就產生myregex的所有比賽的名單。 現在,問題是源很長,我只需要首先發生6次匹配myregex的子字符串。我想如果匹配過程在查找到第n個事件後可能會停止,速度會更快。 我該怎麼做:
myregex.findall(source, n)
?
所以這應該很容易,但我有點想念SO或Python文檔的答案。 我使用這個代碼:在Python中找到N個正則表達式的前N個事件
myregex.findall(source)
這就產生myregex的所有比賽的名單。 現在,問題是源很長,我只需要首先發生6次匹配myregex的子字符串。我想如果匹配過程在查找到第n個事件後可能會停止,速度會更快。 我該怎麼做:
myregex.findall(source, n)
?
使用re.finditer
:
import itertools
for m in itertools.islice(re.finditer(pat, text), 6):
...
re.finditer
是產生需求match
對象發電機。您可以從m.group(0)
獲得完整匹配,或從m.group(1)
及以上獲得單個匹配模式。
既然你想要的性能,使用regex.finditer
def my_find(regex, s, n):
const = regex.finditer(s)
return [const.next().groups() for i in range(n)]
或者一個更安全的版本:
def my_find(regex, s, n):
const = regex.finditer(s)
ret_val = []
for i in range(n):
try:
ret_val.append(const.next().groups())
except StopIteration:
return ret_val
return ret_val
不,這仍然會做所有的搜索。該OP尋找一種方法來減少尋找比賽所花費的時間。 –
我的問題是關於性能。要在列表上執行切片,首先需要計算整個列表,這是我想避免的。 –
然後使用'finditer'。 – pradyunsg