从字符串中移除长度小于4的单词
我想从一个字符串中去掉长度小于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.'