劣势符号替换字符串

时间:2019-06-05 21:31:35

标签: python regex

我想用“ NONE”代替字符串“ <75%”。 我已经编写了此函数,但它不匹配:(

replacements = {'toot': 'titi-',
                '<75%': 'NONE'}

def replace(match):

    return replacements[match.group(0)]

def clean75Case(text_page):
    return re.sub('|'.join(r'\b%s\b' % re.escape(s) for s in replacements),
           replace, text_page)

if __name__ == '__main__':
    print(clean75Case("toot iiii <75%"))

1 个答案:

答案 0 :(得分:1)

如评论中所述,问题是\b仅匹配单词和非单词字符之间的边界。来自the docs

  

\ b

     

匹配空字符串,但仅在单词的开头或结尾。   单词定义为单词字符序列。注意   正式地,\ b被定义为\ w和\ W之间的边界   字符(反之亦然),或者\ w与该字符的开头/结尾之间   字符串

在您输入的字符串中,空格字符()和小于字符(<)都是非单词字符。因此\b与它们之间的空白不匹配。

要解决此问题的另一种方法,请考虑使用split()将字符串拆分为单词,并将每个单词与替换模式进行比较,如下所示:

replacements = {'toot': 'titi-',
                '<75%': 'NONE'}

def clean75Case(text_page):
    words = text_page.split()
    return ' '.join(replacements.get(w, w) for w in words)

if __name__ == '__main__':
    print(clean75Case("toot iiii <75%"))