在每两个定界符之间替换文本

时间:2019-05-15 15:21:45

标签: python regex

我有以下字符串

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的定界符。

您有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您应将.*更改为.*?,因为.*会贪婪地匹配所有内容,并且会消耗掉您不想匹配的部分。最好从正则表达式中删除组,因为您不使用它们,因为这会使正则表达式的性能更好。

因此,您可以使用\[\b.*?\b\.]并将其替换为frog或任何您喜欢的东西。

Regex Demo

检查更新的Python代码,

import re

s = 'animal: [cat.], animal:[dog.]'

b = re.sub(r'\[\b.*?\b\.]','frog', s)
print(b)

打印

animal: frog, animal:frog