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

问题描述 投票:2回答:1

我正在尝试设计一个正则表达式模式,删除长度小于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个字符以上的“单词”吗?

python regex
1个回答
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!

但是:ぁzxswい

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

如果你想避免删除像https://regex101.com/r/ZEzYtM/3/这样的单词,那么使用:

!ab

但是:ぁzxswい

© www.soinside.com 2019 - 2024. All rights reserved.