0

我的 python 脚本将读取文件中的每一行并在每一行中进行许多正则表达式替换。

如果正则表达式成功,请跳到下一行

有什么方法可以加快这种脚本的速度吗?
是否值得调用 subn 并检查替换是否完成然后跳到剩下的?
如果我编译正则表达式,是否可以将所有编译的正则表达式存储在内存中?

for file in files:  
     for line in file:  
         re.sub() # <--- ~ 100 re.sub

PS:每个正则表达式的替换变量

4

2 回答 2

2

你可能应该做三件事:

  1. 减少正则表达式的数量。根据替换部分的不同,您可以将它们全部组合成一个。使用仔细的交替,您可以确定匹配正则表达式部分的顺序。
  2. 如果可能(取决于文件大小),将文件完全读入内存。
  3. 编译你的正则表达式(仅是为了可读性;只要正则表达式的数量保持在 100 以下,速度就无关紧要)。

这给了你类似的东西:

regex = re.compile(r"My big honking regex")
for datafile in files:
    content = datafile.read()
    result = regex.sub("Replacement", content)
于 2012-08-25T05:53:52.827 回答
2

正如@Tim Pietzcker 所说,您可以通过使它们成为替代品来减少正则表达式的数量。您可以通过使用匹配对象的“lastindex”属性来确定哪个替代匹配。

这是您可以执行的操作的示例:

>>> import re
>>> replacements = {1: "<UPPERCASE LETTERS>", 2: "<lowercase letters>", 3: "<Digits>"}
>>> def replace(m):
...     return replacements[m.lastindex]
...
>>> re.sub(r"([A-Z]+)|([a-z]+)|([0-9]+)", replace, "ABC def 789")
'<UPPERCASE LETTERS> <lowercase letters> <Digits>'
于 2012-08-26T01:26:15.507 回答