【发布时间】:2017-06-13 17:42:12
【问题描述】:
我有多个 (>30) 已编译的正则表达式
regex_1 = re.compile(...)
regex_2 = re.compile(...)
#... define multiple regex's
regex_n = re.compile(...)
然后我有一个函数,它接受 text 并使用上面的每一个正则表达式和 re.sub 方法替换它的一些单词,如下所示
def sub_func(text):
text = re.sub(regex_1, "string_1", text)
# multiple subsitutions using all regex's ...
text = re.sub(regex_n, "string_n", text)
return text
问题:有没有更有效的方法来进行这些替换?
正则表达式不能从其当前形式概括或简化。
我觉得每次为每个正则表达式重新分配 text 的值非常慢,因为该函数每次重新分配时只替换整个 text 中的一两个单词。此外,考虑到我必须为多个文档执行此操作,这会进一步减慢速度。
提前致谢!
【问题讨论】:
-
如果这些替换是互斥的,您可能会发现使用
re.sub(re.compile("pattern1|pattern2|..."), function_that_handles_match, text)会更快。 (当然是未经检验的假设:) -
@Pythonista 如果他想为每个正则表达式替换一个单独的字符串就行不通
-
当您开始命名变量
xxx_1、xxx_2等时,这表明您确实想将这些变量收集到一个列表中。使添加或重新排序变得更加容易,并且迭代列表比复制/粘贴do_this_to(xxx_1); do_this_to(xxx_2); do_this_to(xxx_2a_which_i_needed_between_2_and_3_but_didnt_want_to_renumber_everything); do_this_to(xxx_3); etc.更简单 -
您是否看到随着正则表达式数量的增加而性能下降? (即你不是想过早地优化它吗?)
-
1.如果您向我们展示一些典型的正则表达式和典型的替换字符串,将会有所帮助。 2. 这些文件有多大?在部分(行、段落、页面)中处理文档可能比在大型文档中执行多个字符串替换更有效。每次替换都涉及分配一个新字符串,当您对一个大字符串进行多次替换时,这会变得很昂贵。
标签: python regex nlp python-3.6