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

时间:2014-06-20 16:44:30

标签: python regex

我正在尝试从字符串中删除长度小于4的单词。

我使用这个正则表达式:

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

虽然这会删除一些字符串,但是当长度小于4的2-3个单词出现时它会失败。像:

 I am in a bank.

它给了我:

 I in bank. 

如何解决这个问题?

3 个答案:

答案 0 :(得分:10)

不要包括空格;改为使用\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.'

答案 1 :(得分:3)

如果您想要替代正则表达式:

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

答案 2 :(得分:1)

Martijn回答,但我只想解释为什么你的正则表达式不起作用。正则表达式字符串' \w{1,3} '匹配一个空格,后跟1-3个单词字符,后跟另一个空格。 I没有匹配,因为它前面没有空格。 am被替换,然后正则表达式引擎从下一个不匹配的字符开始:i中的in。它没有看到in之前的空间,因为它是通过替换放置在那里的。因此,它找到的下一个匹配是a,它会生成输出字符串。