正则表达式替换字符,除非它们在一个单词内?

时间:2017-08-03 17:13:39

标签: python regex

如何替换字符串中的一组字符,除非它们是单词的一部分?例如,如果我的文字是“你的wurst person ur”,我想用“youre”替换“ur”。所以最后的文字将是“你是你的香火人”。我不希望改变香肠里面的“你”,因为它在一个单词里面。在python中有一个通用的正则表达方式吗?如果“ur”之前或之后有空格等,我不想担心,只要它是另一个单词的一部分。谢谢!

到目前为止我尝试的是一个简单的

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

但这也取代了“wurst”里面的“ur”。如果我在

中使用单词边界
    result = re.sub(r"\bur\b", "youare", text)

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

2 个答案:

答案 0 :(得分:0)

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

您可以使用string.split()拆分每个空格的字符串,然后在列表解析中,将'ur'替换为'youre'。这可能类似于:

s = "ur the wurst person ur"

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

希望这有帮助!

答案 1 :(得分: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'。