gpt4 book ai didi

python - 使用列表理解和 dict 进行正则表达式替换

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:26 25 4
gpt4 key购买 nike

以下 Python 3 代码循环遍历字符串列表并使用正则表达式替换每个字符串中的一些文本。

这里的字符串很简单,但在现实世界中它们可能更复杂,数量也更多,因此我决定使用 re.sub() 而不是 str .replace().

all = ("this line has no hits",
"a letter to tom from peter",
"today bonny went to school",
"harry made some cake")

for myitem in all:
newitem = re.sub("harry","sally",myitem)
newitem = re.sub("tom","jerry",newitem)
newitem = re.sub("bonny","clyde",newitem)
print(newitem)

这似乎按预期工作:

>>> this line has no hits
a letter to jerry from peter
today clyde went to school
sally made some cake
>>>

在现实生活中会有大量的字符串,这会导致代码块困惑。我认为通过在 dict 中定义正则表达式对并使用列表推导式,可能有一种更简洁、更 Pythonic 的方法来做到这一点。所以我尝试了这个:

mydict = {'harry':'sally','tom':'jerry','bonny':'clyde'}

newall = [re.sub(i, mydict[i], j) for i in mydict for j in all]
print(newall)

这行不通,因为它不返回带有替换文本的字符串列表,但我不明白为什么它行不通。

我的问题是:

  • 在上面的例子中我做错了什么?
  • 是否有更好的方法来解决涉及长字符串的大量替换问题?

(注意我可能错过了这里明显的地方,因为我只研究了 Python 几天;我的背景是 R 和 Perl。)

最佳答案

包含两个列表的列表推导是令人讨厌的。它们容易出错且难以阅读。为什么不简单地使用两个循环?:

all = ("this line has no hits",
"a letter to tom from peter",
"today bonny went to school",
"harry made some cake")

mydict = {'harry':'sally','tom':'jerry','bonny':'clyde'}

output = []
for line in all:
for search, replace in mydict.items():
line = re.sub(search, replace, line)
output.append(line)

print(output)

['this line has no hits', 'a letter to jerry from peter', 'today clyde went to school', 'sally made some cake']

关于python - 使用列表理解和 dict 进行正则表达式替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34593373/

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