我正在尝试设计一种正则表达式模式,以删除少于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)
是否可以使用更好的正则表达式?我应该改为保留四个字符或更多的“单词”吗?
答案 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*