Skip to main content
 首页 » 编程设计

python之用于删除 3 个或更少字符的 block 的正则表达式

2024年11月24日29bhlsheji

我正在尝试设计一个正则表达式模式来删除长度少于 4 个字符的单词。问题是,附加到单词的任何特殊字符(主要是: !@#$%^&*().,;? ) “年龄?”将不满足移除条件,所以“hi!!”、“you?”、“hello boy!”应该全部从输入字符串中保留下来。举例说明:

string1='my name is jen!' 

我试过正则表达式,

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

并将其与 re.sub 耦合:

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

这很好用,除了,1.我必须用空格代替模式,有时必须手动删除,2.如果 3 个字符或更少的“单词”位于字符串结束。

string1='my name is jen' 
re.sub(regex1,' ',string1) 
out: ' name jen' 

有没有更好的正则表达式可以使用?我是否应该尝试保留 4 个或更多字符的“单词”?

请您参考如下方法:

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

\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