我正在尝试将此字符串替换为此
import re
s = "haha..hehe.hoho"
s = re.sub('[..+]+',' ', s)
我的输出我得到haha hehe hoho
所需的输出
haha hehe.hoho
我做错了什么?
答案 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)
以下是您的正则表达式的含义:
因此,您允许使用1个或多个文字句号或加号,但实际情况并非如此。
您在查找时不必重复相同的符号,您可以使用量词,例如{2}
,这意味着"恰好2次出现"。
您可以使用split
和join
,请参阅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)