从Python列表中删除字符串中所有单词的出现。
我正在尝试用一个编译好的正则表达式,从一个字符串中匹配并移除一个列表里的所有单词,但我遇到了问题,就是不想把单词中间的部分也去掉。
目前的情况是:
REMOVE_LIST = ["a", "an", "as", "at", ...]
remove = '|'.join(REMOVE_LIST)
regex = re.compile(r'('+remove+')', flags=re.IGNORECASE)
out = regex.sub("", text)
输入: "快速的棕色狐狸跳过了一只蚂蚁"
输出: "快速的棕色狐狸跳过了 t"
期望的输出: "快速的棕色狐狸跳过了"
我尝试把字符串改成这样来编译,但还是没成功:
regex = re.compile(r'\b('+remove+')\b', flags=re.IGNORECASE)
有没有什么建议,或者我是不是漏掉了什么明显的东西?
2 个回答
19
这里有一个建议,不用正则表达式,你可以考虑一下:
>>> sentence = 'word1 word2 word3 word1 word2 word4'
>>> remove_list = ['word1', 'word2']
>>> word_list = sentence.split()
>>> ' '.join([i for i in word_list if i not in remove_list])
'word3 word4'
14
一个问题是,只有第一个 \b
是在原始字符串里面。第二个 \b
被当成了退格符(ASCII 8),而不是作为单词的边界。
要解决这个问题,可以把
regex = re.compile(r'\b('+remove+')\b', flags=re.IGNORECASE)
改成
regex = re.compile(r'\b('+remove+r')\b', flags=re.IGNORECASE)
^ THIS