我尝试用正则表达式执行以下操作:
import re
x = re.compile('[^(going)|^(you)]') # words to replace
s = 'I am going home now, thank you.' # string to modify
print re.sub(x, '_', s)
我得到的结果是:
'_____going__o___no______n__you_'
我想要的结果是:
'_____going_________________you_'
由于
^
只能在方括号内使用,所以这个结果是有意义的,但我不确定如何处理它。我甚至尝试过
[]
但是它产生了'([^g][^o][^i][^n][^g])|([^y][^o][^u])'
。 最佳答案
不像第一次显示的那么简单,因为在res中没有“not”,除了^
内部的[ ]
只匹配一个字符(如您发现的那样)。这是我的解决方案:
import re
def subit(m):
stuff, word = m.groups()
return ("_" * len(stuff)) + word
s = 'I am going home now, thank you.' # string to modify
print re.sub(r'(.+?)(going|you|$)', subit, s)
给予:
_____going_________________you_
解释。re本身(我总是使用原始字符串)匹配任何字符(
.+
)中的一个或多个,但不是贪婪的(?
)。这是在第一个括号组(括号)中捕获的。后面是“Going”或“You”或行尾($
)。subit
是一个函数(您可以在reason内调用它),每次替换都会调用它。传递一个匹配对象,我们可以从中检索捕获的组。第一组我们只需要的长度,因为我们要用下划线替换每个字符。返回的字符串将替换为与模式匹配的字符串。关于python - Python正则表达式替换除特定单词之外的所有内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38221224/