我是模式匹配的新手,并且具有这样的功能:
def replaceSynonymns(title, words):
pattern = re.compile(r'\b(' + '|'.join(words) + ')\b')
title = re.sub(pattern, words[0], title)
return title
一个这样的例子,是['网络','互联网','在线','数字'],因此如果我们把标题称为“我在互联网上”,我们应该得到'我'在网上'
但不幸的是它没有用 - 因为我认为将列表纳入编译模式部分是不正确的 - 任何提示?
答案 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)