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()
一次。
我正在尝试将 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()
一次。