2017-08-03 135 views
-2

如何替换字符串中的一组字符,除非它们是单词的一部分?例如,如果我有文本“你的人是我的”,我想用“你”替换“你的”。所以最后的文本将是“你是你最喜欢的人”。我不想让香肠内的“尿”被改变,因为它在一个词的内部。有没有一种通用的正则表达式在Python中做到这一点?我不想担心如果“你”在之前或之后有空格等,只有它是另一个词的一部分。谢谢!正则表达式替换字符,除非它们在单词的内部?

我到目前为止已经试过是一个简单的

result = re.sub("ur", "youare", text) 

但这也取代了“UR”里的“香肠”。如果我使用的字边界在

result = re.sub(r"\bur\b", "youare", text) 

它将错过字符串中最后一次出现的“乌尔”。

+1

文字边界'r'\ bur \ b'' – anubhava

+0

你能证明*任何*努力解决这个问题吗? –

+0

如果你发布你已经试过的代码,你会得到更好的答案 – Ananth

回答

0

如果不使用正则表达式...

你可以在每个空间string.split()分割字符串,然后在列表中理解,与'youre'更换的话'ur'。这可能看起来像这样:

s = "ur the wurst person ur" 

result = " ".join(['youre' if w == 'ur' else w for w in s.split()]) 

希望这有助于!

0

result = re.sub(r'\bur\b', r'youare', "ur the wurst person ur")

从Python文档:

\ b 匹配空字符串,但只在一个单词的开头或结尾。一个单词被定义为一系列的Unicode字母数字或下划线字符,所以单词的末尾用空格或非字母数字,非下划线Unicode字符表示。请注意,在形式上,\ b被定义为\ w和\ W字符之间的界限(反之亦然),或\ w和字符串的开始/结尾之间的界限。这意味着r'\ bfoo \ b'匹配'foo','foo。','(foo)','bar foo baz',但不匹配'foobar'或'foo3'。