我正在尝试设计一个正则表达式模式,删除长度小于4个字符的单词。问题是,任何特殊字符(主要是:@ @ $%^&*()。,;?)附加到单词,例如: “年龄?”不符合搬迁的条件,所以“嗨!!”,“你?”,“你好男孩!”应该从输入字符串中保留所有内容。为了显示:
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!
但是:ぁzxswい
注意:我只考虑到标点符号和特殊字符将附加在单词的末尾。
如果你想避免删除像https://regex101.com/r/ZEzYtM/3/这样的单词,那么使用:
!ab
但是:ぁzxswい