您的示例都不需要正则表达式。为什么不尝试好的 ol' 字符串替换?
replacements = [
('USA','United States Of America'),
('U\.S\.A','United States Of America'),
('US of A', 'United States of America')]
for replacement in replacements:
document = document.replace(replacement[0], replacement[1])
这似乎会很慢,但是您应该在排除该方法之前对其进行基准测试。Python 非常擅长这样的事情,结果可能会让你大吃一惊。
如果你真的需要正则表达式,你可能会通过编译它们看到巨大的提升:
replacements = [
(re.compile('USA'),'United States Of America'),
(re.compile('U\.S\.A'),'United States Of America'),
(re.compile('US of A'), 'United States of America')]
for pattern, replacement in replacements:
document = pattern.sub(replacement, document)
这节省了 Python 每次使用它们时都必须重新编译这些正则表达式的工作。
如果您有时只需要正则表达式,请考虑对文档进行两次传递:一次使用正则表达式,一次使用字符串替换。或者,如果您需要一些特定的替换顺序,您可以使用以下内容:
replacements = [
(re.compile('USA'),'United States Of America'),
('foo', 'bar'),
(re.compile('U\.S\.A'),'United States Of America'),
('spam', 'eggs'),
(re.compile('US of A'), 'United States of America')]
for pattern, replacement in replacements:
try:
document = pattern.sub(replacement, document)
except AttributeError:
document = document.replace(pattern, replacement)