我尝试用正则表达式执行以下操作:

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/

10-11 22:39
查看更多