使用Python删除小单词

2024-05-26 00:33:44 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以使用regex删除文本中的小单词?例如,我有以下字符串(文本):

anytext = " in the echo chamber from Ontario duo "

我想删除所有不超过3个字符的单词。结果应该是:

"echo chamber from Ontario"

是否可以使用正则表达式或任何其他python函数来实现这一点?

谢谢。


Tags: the函数字符串infrom文本echo单词
2条回答

我不认为你需要一个正则表达式为这个简单的例子无论如何。。。

' '.join(word for word in anytext.split() if len(word)>3)

当然,也没那么难:

shortword = re.compile(r'\W*\b\w{1,3}\b')

上面的表达式选择任何前面有一些非单词字符(基本上是空白或开头)的单词,短1到3个字符,并以单词边界结尾。

>>> shortword.sub('', anytext)
' echo chamber from Ontario '

在这里,\b边界匹配非常重要,它们确保您不会只匹配单词的前3个字符或后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

相关问题 更多 >