作者:她的马尔代夫 | 来源:互联网 | 2023-10-11 18:29
当然,这也不难:
shortword = re.compile(r'\W*\b\w{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