Python 正则表达式重新模块 运行 无限期

Python Regex re module running indefinitely

我正在尝试将 Um 的每个实例替换为 #Um。例如,"Um, i have an Umbrella" 将是“#Um,我有一把雨伞”,我想要 Umbrella,因为它不只是 Um

下面是我的代码。

while re.search(r'\bUm\b', trans):
            trans = re.sub(r'\bUm\b', r'#Um', trans)

而且我的代码不会停止 运行。它无限循环。还有其他方法可以解决这个问题吗?

它是 运行 无限,因为 search 只是 returns 它找到的第一个匹配项。所以在这种情况下它总是相同的字符串(因为'#'不是单词字符)。非空字符串的计算结果为真。您应该这样做,因为 sub 无论如何都会更改所有匹配项:

trans = "Um, i have an Umbrella"
trans = re.sub(r'\bUm\b', r'#Um', trans)
print(trans)

输出:

#Um, i have an Umbrella

替换后,该字符串仍与您正在测试的正则表达式匹配,因为 #Um 中的 #U 之间存在单词边界。单词边界是一侧有单词字符而另一侧有非单词字符的任何地方。

所以在你完成第一次替换之后,字符串是

#Um, i have an Umbrella

下一次迭代将其更改为

##Um, i have an Umbrella

它不断地添加 #

由于 re.sub() 替换字符串中的所有匹配项(除非您使用限制它的可选参数),因此无需在循环中执行相同的替换。去掉 while 语句,只调用 re.sub() 一次。