我想用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