我的问题如下:
我有一些字符串,要在其中删除连续少于2个的点。如果大于2,则应保留。
我尝试为此使用正则表达式,但由于删除了所有内容,因此无法正常工作。
我正在使用的代码
re.sub('\.{,2}', '', 'Hello.... I am shy.')
我想要的结果:
Hello.... I am shy
我得到的结果:
Hello I am shy
谢谢您的帮助
答案 0 :(得分:1)
解决方案
re.sub('(?<!\.)\.{,2}(?!\.)', '', 'Hello.... I am shy.')
我必须检查匹配是否以点开头还是以点开头的问题。
但是我们使用普通的正则表达式,也可以匹配圆点周围的环境,但我们不希望删除它。因此,我们使用运算符
?<!
和
?!
是后面的和lockahead运算符。您可以检查条件而不必将其匹配。这是一个很好的解决方案。
P.S .:我意识到Wiktor拥有相同的解决方案,但是他没有给出任何适当的解释。
答案 1 :(得分:-1)
您需要确保0、1或2个点之后的所有内容都不是点,因此您需要这样的正则表达式
re.sub('\.{0,2}([^.]|$)', '$1', 'Hello.... I am shy.')
这将查找0、1或2个点,后跟非点字符或行尾。
编辑: 以前的版本在点后剥去了字符。