我想用python在字符串中查找某些關鍵字。該字符串是這樣的:蟒蛇正則表達式幾千字
A was changed from B to C
所有我想找到的是「到C」部分,其中C是許多千言萬語之一。
此代碼會生成正則表達式的字符串:
pre_pad = 'to '
regex_string = None
for i in words:
if regex_string == None:
regex_string = '\\b%s%s(?!-)(?!_)\\b' %(pre_pad, i)
else:
regex_string = regex_string + '|\\b%s%s(?!-)(?!_)\\b' %(pre_pad, i)
,後來我做的:
matches = []
for match in re.finditer(r"%s" %regex_string, text):
matches.append([match, MATCH_TYPE])
此代碼在Linux上工作,但墜毀在MacOS與「夾縫OverflowError而渲染:定期表達代碼大小限制超出「
我意識到該regex_string很長,這是問題
print regex_string.__len__()
63574
的事業,我怎麼能解決這個問題所以這將總是工作,獨立的單詞的數量?
編輯:
我忘了提及的是,pre_pad有時是空的:pre_pad =「」,因此搜索pre_pad首先是不可能的。
除此之外,我首先構建整個regex_string然後將其與單詞匹配的原因是我必須爲數千個條目進行匹配。如果我不得不再次每次構建regex_string,這將導致非常差的性能。
哦,我需要知道哪個詞匹配。
你甚至不應該用你的正則表達式來做這件事,你所描述的甚至不是像正則表達式那樣。只需將字符串拆分爲空格並遍歷單詞,以檢查所需關鍵字的「set」或「dict」。 – 2011-06-08 10:12:32
不會這樣慢嗎? – memyself 2011-06-08 10:17:06
爲什麼它會變慢? set和dict查找在設計上是非常快速的(並且必須是,實際上你在Python中做的每件事都以某種方式依賴於字典),並且我在大約1秒內將28MB字符串分割成400萬個元素的列表。你的琴絃多麼巨大?不成熟的優化只會浪費寶貴的開發人員時間,而且通常最終會給你提供次優代碼。 – 2011-06-08 10:28:04