gpt4 book ai didi

python - 如何使用正则表达式进行多次替换?

转载 作者:IT老高 更新时间:2023-10-28 22:10:53 24 4
gpt4 key购买 nike

我可以使用下面的代码创建一个新文件,并使用正则表达式将 a 替换为 aa

import re

with open("notes.txt") as text:
new_text = re.sub("a", "aa", text.read())
with open("notes2.txt", "w") as result:
result.write(new_text)

我想知道我是否必须多次使用这一行 new_text = re.sub("a", "aa", text.read()),但用字符串替换其他字符串为了更改文本中的多个字母而要更改的字母?

a-->aa,b-->bb c--> cc

所以我必须为我想要更改的所有字母写那行,或者有更简单的方法。也许是为了创建一个翻译“词典”。我应该将这些字母放入数组中吗?如果我这样做,我不知道如何调用他们。

最佳答案

@nhahtdh 提出的答案是有效的,但我认为它不如规范示例那么 Pythonic,它使用的代码比他的正则表达式操作更不透明,并利用了 Python 的内置数据结构和匿名函数特性。

翻译词典在这种情况下是有意义的。事实上,Python Cookbook 就是这样做的,如本例所示(复制自 ActiveState http://code.activestate.com/recipes/81330-single-pass-multiple-replace/)

import re 

def multiple_replace(dict, text):
# Create a regular expression from the dictionary keys
regex = re.compile("(%s)" % "|".join(map(re.escape, dict.keys())))

# For each match, look-up corresponding value in dictionary
return regex.sub(lambda mo: dict[mo.string[mo.start():mo.end()]], text)

if __name__ == "__main__":

text = "Larry Wall is the creator of Perl"

dict = {
"Larry Wall" : "Guido van Rossum",
"creator" : "Benevolent Dictator for Life",
"Perl" : "Python",
}

print multiple_replace(dict, text)

所以在你的情况下,你可以制作一个字典 trans = {"a": "aa", "b": "bb"} 然后将它传递给 multiple_replace 以及您要翻译的文本。基本上,该函数所做的只是创建一个巨大的正则表达式,其中包含要翻译的所有正则表达式,然后当找到一个时,将 lambda 函数传递给 regex.sub 以执行翻译字典查找。

您可以在读取文件时使用此功能,例如:

with open("notes.txt") as text:
new_text = multiple_replace(replacements, text.read())
with open("notes2.txt", "w") as result:
result.write(new_text)

我实际上在生产中使用了这种精确的方法,在我需要将一年中的月份从捷克语翻译成英语以完成网络抓取任务的情况下。

正如@nhahtdh 指出的那样,这种方法的一个缺点是它不是无前缀的:作为其他字典键前缀的字典键将导致方法中断。

关于python - 如何使用正则表达式进行多次替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15175142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com