Python:连续多个正则表达式?

时间:2017-03-04 17:13:58

标签: python regex text

我有一些文本文件是另一个软件的输出。我有一个用胶带粘在一起的Perl脚本,用一系列近100个正则表达式连续清理它们。

我是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 个答案:

答案 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