从字符串中移除长度小于4的单词

15 投票
3 回答
47739 浏览
提问于 2025-04-18 10:32

我想从一个字符串中去掉长度小于4的单词。

我使用了这个正则表达式:

 re.sub(' \w{1,3} ', ' ', c)

虽然这个方法能去掉一些单词,但当有2到3个长度小于4的单词连在一起时,它就失效了。比如:

 I am in a bank.

它给我的结果是:

 I in bank. 

我该怎么解决这个问题呢?

3 个回答

1

Martijn回答了这个问题,但我想解释一下为什么你的正则表达式不管用。这个正则表达式 ' \w{1,3} ' 的意思是:先匹配一个空格,然后是1到3个字母或数字,再后面再跟一个空格。字母 I 没有被匹配到,因为它前面没有空格。而 am 被替换掉了,接着正则表达式引擎从下一个没有匹配到的字符开始查找,也就是 in 里的 i。它没有看到 in 前面的空格,因为那个空格是替换时加上的。所以,它找到的下一个匹配是 a,这就产生了你的输出结果。

8

如果你想要一个替代正则表达式的方法:

new_string = ' '.join([w for w in old_string.split() if len(w)>3])
26

不要加空格;使用 \b 这个词边界锚点来代替:

re.sub(r'\b\w{1,3}\b', '', c)

这样可以完全去掉长度不超过3个字符的单词:

>>> import re
>>> re.sub(r'\b\w{1,3}\b', '', 'The quick brown fox jumps over the lazy dog')
' quick brown  jumps over  lazy '
>>> re.sub(r'\b\w{1,3}\b', '', 'I am in a bank.')
'    bank.'

撰写回答