2017-03-04 116 views
2

我有一些文本文件是另一个软件的输出。我有一个Perl脚本通过胶带粘在一起,它们连续清理了几乎100个正则表达式。Python:连续多个正则表达式?

我是新来的Python和不知道是否有处理这种比这些大的块,这是很多比的perl的结构更重更习惯的方法:string =~ s/blah/blah/i;

string = re.sub(r' +', " ", string, re.I) 
string = re.sub(r'(\w)- ', "\1, ", string, re.I) 
string = re.sub(r'u-s', "U.S.", string, re.I) 

比如有的正则表达式和替代的字典?我也很好奇连续多次调用模块的函数会如何影响性能?

+1

无需一个'dict',但两'tuple's的'list'才有意义。 – ShadowRanger

+0

如何运行如此多的正则表达式而不会发生重叠? – sln

+0

源文件是一个提词器脚本,因此许多用于提词器软件的独特格式化代码都将被删除,以及频繁出现的问题(例如,连字符被用来显示暂停而不是逗号)。该文件正在转换为纯文本供人类阅读。 –

回答

2

如果将正则表达式放入元组中,那么迭代元组并执行替换就很容易了。

正则表达式:

import re 
regexs = (
    (r' +', " ", re.I), 
    (r'(\w)- ', "\1, ", re.I), 
    (r'u-s', "U.S.", re.I), 
) 
compiled_regexs = [(re.compile(rx[0], rx[2]), rx[1]) for rx in regexs] 

代码:

for line in lines: 
    for regex, replace in compiled_regexs: 
     line = regex.sub(replace, line) 
    print(line) 

测试数据:

lines = (
    'Quick Brown Fox', 
    'u-s lazy dog', 
) 

结果:

Quick Brown Fox 
U.S. lazy dog