我正在尝试使用已编译的正则表达式匹配并删除列表中的所有单词,但我正在努力避免在单词中出现.
当前:
REMOVE_LIST = ["a", "an", "as", "at", ...]
remove = '|'.join(REMOVE_LIST)
regex = re.compile(r'('+remove+')', flags=re.IGNORECASE)
out = regex.sub("", text)
Run Code Online (Sandbox Code Playgroud)
在:"快速的棕色狐狸跳过一只蚂蚁"
出:"快速的棕色狐狸跳过了"
预计:"快速棕色狐狸跳过"
我已经尝试更改字符串以编译为以下但无济于事:
regex = re.compile(r'\b('+remove+')\b', flags=re.IGNORECASE)
Run Code Online (Sandbox Code Playgroud)
有什么建议或者我错过了一些非常明显的东西吗?
jur*_*eza 18
这里有一个不使用正则表达式的建议你可能要考虑:
>>> 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'
Run Code Online (Sandbox Code Playgroud)
NPE*_*NPE 11
一个问题是只有第一个\b在原始字符串中.第二个被解释为退格字符(ASCII 8)而不是字边界.
要修复,改变
regex = re.compile(r'\b('+remove+')\b', flags=re.IGNORECASE)
Run Code Online (Sandbox Code Playgroud)
至
regex = re.compile(r'\b('+remove+r')\b', flags=re.IGNORECASE)
^ THIS
Run Code Online (Sandbox Code Playgroud)