如何在python中的字符串中替换..

时间:2015-04-07 07:47:39

标签: python regex

我正在尝试将此字符串替换为此

import re 

s = "haha..hehe.hoho"
s = re.sub('[..+]+',' ', s)

我的输出我得到haha hehe hoho

所需的输出

haha hehe.hoho

我做错了什么?

6 个答案:

答案 0 :(得分:3)

在regexpal等网站上进行测试:http://regexpal.com/ 它更容易获得输出并检查正则表达式是否正确。

您应该将正则表达式更改为:' \。\。'如果你只想删除双点。 如果你想删除至少2个点,你可以使用' \。{2,}'。

您在[]中放置的每个字符都将根据您的表达进行检查 点字符在正则表达式上有特殊含义,为了避免这种含义,你应该在它前面添加一个转义字符:\

您可以在此处详细了解正则表达式元字符:https://www.hscripts.com/tutorials/regular-expression/metacharacter-list.php

  

[a-z]一系列字符。匹配指定的任何字符   范围。

     

。匹配除" n"。

之外的任何单个字符      

\将下一个字符指定为特殊字符,文字,后引用或八进制转义。

您的新代码:

import re 

s = "haha..hehe.hoho"
#pattern = '\.\.' #If you want to remove when there's 2 dots
pattern = '\.{2,}' #If you want to remove when there's at least 2 dots
s = re.sub(pattern, ' ', s)

答案 1 :(得分:2)

除非你被限制使用正则表达式,否则我发现replace()函数更简单:

s = "haha..hehe.hoho"
print s.replace('..',' ')

给出您想要的输出:

haha hehe.hoho

答案 2 :(得分:1)

变化:

re.sub('[..+]+',' ', s)

为:

re.sub('\.\.+',' ', s) 

答案 3 :(得分:1)

[..+]+regex中的含义是至少使用列表中的any。因此,它与您输入中的...相匹配。进行如下更改:

s = re.sub('\.\.+',' ', s)

答案 4 :(得分:1)

以下是您的正则表达式的含义:

enter image description here

因此,您允许使用1个或多个文字句号或加号,但实际情况并非如此。

您在查找时不必重复相同的符号,您可以使用量词,例如{2},这意味着"恰好2次出现"。

您可以使用splitjoin,请参阅sample working program

import re 

s = "haha..hehe.hoho"
s = " ".join(re.split(r'\.{2}', s))
print s

输出:

haha hehe.hoho

或者您也可以将sub与正则表达式一起使用:

s = re.sub(r'\.{2}', ' ', "haha..hehe.hoho")

如果您的案例超过2个句点,则应使用\.{2,}正则表达式。

答案 5 :(得分:1)

[]是一个字符类,它将匹配其中的任何内容(意味着任何1 .)。

我猜你使用它是因为一个简单的.不会起作用,因为它是一个元字符,意思是任何字符。您可以简单地将其转义为带有\的文字点。就这样:

s = re.sub('\.\.',' ', s)