在Python 3中加速数百万个正则表达式的替换
我正在使用Python 3.5.2
我有两个清单
- 大约750,000个“句子”(长字符串)的列表
- 我想从我的750,000个句子中删除的大约20,000个“单词”的列表
因此,我必须遍历750,000个句子并执行大约20,000个替换,但前提是我的单词实际上是“单词”,并且不属于较大的字符串。
我这样做是通过预编译我的单词,使它们位于\b元字符的两侧
compiled_words = [re.compile(r'\b' + word + r'\b') for word in my20000words]
然后我遍历我的“句子”
import refor sentence in sentences:
for word in compiled_words:
sentence = re.sub(word, "", sentence)
# put sentence into a growing list
这个嵌套循环每秒处理大约50个句子,这很好,但是处理我所有的句子仍需要几个小时。
有没有一种使用该str.replace方法的方法(我认为是更快的方法),但仍然要求仅在单词边界处进行替换?
或者,有没有办法加快该re.sub方法?re.sub如果我的单词的长度大于句子的长度,我已经略微提高了速度,但这并没有太大的改进。
感谢你的任何建议。
回答:
你可以尝试做的一件事就是编译一个单一模式,例如"\b(word1|word2|word3)\b"
。
由于re
依靠C代码进行实际匹配,因此节省的费用可观。
正如@pvg在评论中指出的,它也受益于单遍匹配。
如果你的单词不是正则表达式,那么Eric的答案会更快。
以上是 在Python 3中加速数百万个正则表达式的替换 的全部内容, 来源链接: utcz.com/qa/418683.html