如何删除正则表达式中少于2个点?

时间:2019-04-16 13:09:07

标签: python regex

我的问题如下:

我有一些字符串,要在其中删除连续少于2个的点。如果大于2,则应保留。

我尝试为此使用正则表达式,但由于删除了所有内容,因此无法正常工作。

我正在使用的代码

re.sub('\.{,2}', '', 'Hello.... I am shy.')

我想要的结果:

Hello.... I am shy

我得到的结果:

Hello I am shy

谢谢您的帮助

2 个答案:

答案 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个点,后跟非点字符或行尾。

编辑: 以前的版本在点后剥去了字符。