我正在尝试从字符串中删除长度小于4的单词。
我使用这个正则表达式:
re.sub(' \w{1,3} ', ' ', c)
虽然这会删除一些字符串,但是当长度小于4的2-3个单词出现时它会失败。像:
I am in a bank.
它给了我:
I in bank.
如何解决这个问题?
答案 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
,它会生成输出字符串。