在Python3中,以下代码将*
的字符串(两个或多个)替换为x
。
import re
re.sub(r'\*(?=\*)|(?<=\*)\*', 'x', 'Replace this *** but not this *')
# 'Replace this xxx but not this *'
但是,如果我还想免除作为“单词”一部分的*
字符串,如下所示? (即,字符串被附加到一个或多个[a-zA-Z]
字符上。)
text = "Don't replace foo*** or **bar, either."
# unmodified text expected
我该怎么做?我可能也可以匹配豁免的案件,并使用替换函数来处理它们,但是还有更好的方法吗?
答案 0 :(得分:7)
regex = r"\s\*{2,}[\s\n]"
这匹配2个或更多*
个字符,用空格包围(或以换行符结尾)
可以这样称呼吗?
regex = r"\s\*{2,}[\s\n]"
def replacer(match):
return 'x' * len(match.group())
re.sub(regex, replacer, your_string_here)
答案 1 :(得分:1)
这个答案是丹妮尔·M(Danielle M.)的灵感来源。下面的这种模式似乎给了我我想要的。其余与她的相同。
regex = r'(?<![a-zA-Z])\*{2,}(?![a-zA-Z])'