我正在尝试设计一个正则表达式模式来删除长度少于 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*
