模式匹配和编译

时间:2014-01-21 22:03:23

标签: python regex list replace

我是模式匹配的新手,并且具有这样的功能:

def replaceSynonymns(title, words):
    pattern = re.compile(r'\b(' + '|'.join(words) + ')\b')
    title = re.sub(pattern, words[0], title)
    return title

一个这样的例子,是['网络','互联网','在线','数字'],因此如果我们把标题称为“我在互联网上”,我们应该得到'我'在网上'

但不幸的是它没有用 - 因为我认为将列表纳入编译模式部分是不正确的 - 任何提示?

1 个答案:

答案 0 :(得分:2)

也为最后一个字符串使用原始字符串:

>>> r'\b(' + '|'.join(words) + r')\b' 
'\\b(web|internet|online|digital)\\b'

否则你最终会得到:

>>> r'\b(' + '|'.join(words) + ')\b'
'\\b(web|internet|online|digital)\x08'
                                   ^
                               not escaped

或者更好地使用string formatting

>>> r'\b({})\b'.format('|'.join(words))
'\\b(web|internet|online|digital)\\b'

作为旁注,您可以在编译模式本身上使用.sub

title = pattern.sub(words[0], title)