我有以下字符串
a = "animal: [cat.], animal:[dog.]"
print(a)
>>> animal: [cat.], animal:[dog.]
我想用给定值(例如[
)替换.]
和frog
(包括)之间的字符串的 each 部分。
预期输出为:
animal: frog, animal: frog
到目前为止,我尝试了以下操作:
import re
b = re.sub(r'(\[\b).*(\b\.])','frog', a)
print(b)
>>> animal: frog
它与预期输出略有不同。
我认为这是由于这样的事实,即代码将第一个[
和最后一个.]
视为定界符,因此用frog
替换了之间的所有字符串。
相反,我希望代码考虑两对定界符:包含单词cat
的定界符和包含单词dog
的定界符。
您有什么建议吗?
答案 0 :(得分:2)
您应将.*
更改为.*?
,因为.*
会贪婪地匹配所有内容,并且会消耗掉您不想匹配的部分。最好从正则表达式中删除组,因为您不使用它们,因为这会使正则表达式的性能更好。
因此,您可以使用\[\b.*?\b\.]
并将其替换为frog
或任何您喜欢的东西。
检查更新的Python代码,
import re
s = 'animal: [cat.], animal:[dog.]'
b = re.sub(r'\[\b.*?\b\.]','frog', s)
print(b)
打印
animal: frog, animal:frog