正则表达式,用于删除3个或更少字符的块

时间:2019-04-11 06:44:45

标签: python regex

我正在尝试设计一种正则表达式模式,以删除少于4个字符的单词。要注意的是,任何特殊字符(主要是!@#$%^&*()。;;? “年龄?”不会满足移除条件,因此“嗨!”,“您?”,“你好男孩!”应该全部从输入字符串中保留。为了说明:

Undefined property: Geocoder\Provider\GoogleMaps\Model\GoogleAddress::$getAdminLevels

我尝试过正则表达式

string1='my name is jen!'

并将其与re.sub结合:

regex1=re.compile(r'\b.{,3}\s')

,这很好用,除了:1.我必须用空格对模式进行细分,有时必须手动将其删除,并且2.如果3个字符或更少的“单词”位于字符串的结尾。

string2=re.sub(regex1,' ',string1)

是否可以使用更好的正则表达式?我应该改为保留四个字符或更多的“单词”吗?

1 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式:

\b\w{1,3}(?=\s|$)\s*

在您的python代码中:

$ cat words3.py 
import re

string1='my name is jen!'
print(re.sub(r'\b\w{1,3}(?=\s|$)\s*','',string1)) 

输出:

name jen!

演示https://regex101.com/r/ZEzYtM/3/

注意:我仅考虑到标点​​符号和特殊字符将附加在单词的末尾。

如果要避免删除!ab之类的单词,请使用:

(?<=\s)\b\w{1,3}(?=\s|$)\s*

演示https://regex101.com/r/ZEzYtM/4