当然,这也不难:
shortword = re.compile(r'W*bw{1,3}b')上面的表达式选择任何以某些非单词字符开头的单词(本质上是空格或开头),其长度在1-3个字符之间,并以单词边界结尾。
>>> shortword.sub('', anytext)' echo chamber from ontario '该
b边界的比赛是很重要的位置,他们保证你不匹配只是一个字的第一个或最后3个字符。
在
W*一开始,您可以删除这两个词和前面的非单词字符,这样句子的其余部分仍然匹配起来。需要注意的是标点符号包含在
W,使用
s,如果你 只是
想删除前面的空白。
值得一提的是,这种正则表达式解决方案在其余单词之间 保留了 额外的空格,而mgilson的版本将多个空格字符折叠成一个空格。不知道这对您是否重要。
他的列表理解解决方案 是 两者中较快的一种:
>>> import timeit>>> def re_remove(text): return shortword.sub('', text)... >>> def lc_remove(text): return ' '.join(word for word in text.split() if len(word)>3)... >>> timeit.timeit('remove(" in the echo chamber from ontario duo ")', 'from __main__ import re_remove as remove')7.0774190425872803>>> timeit.timeit('remove(" in the echo chamber from ontario duo ")', 'from __main__ import lc_remove as remove')6.4250049591064453


