如何在Python中只用一次正则表达式替换?

时间:2012-10-04 17:09:22

标签: python regex

现在,re.sub执行此操作:

>>> re.sub("DELETE THIS", "", "I want to DELETE THIS472 go to DON'T DELETE THIS847 the supermarket")
"I want to  go to DON'T  the supermarket"

我希望它只删除“DELETE THISXXX”的第一个实例,其中XXX是一个数字,因此结果是

"I want to  go to DON'T DELETE THIS847 the supermarket"

XXX是一个变化的数字,所以我确实需要一个正则表达式。我怎么能做到这一点?

5 个答案:

答案 0 :(得分:8)

正如re.sub(pattern, repl, string, count=0, flags=0) count中所写的那样,你可以指定 re.sub(pattern, repl, string[, count, flags]) 参数:

{{1}}

如果您只计算1,它将只替换第一个

答案 1 :(得分:3)

来自http://docs.python.org/library/re#re.sub

  

可选参数 count 是要替换的模式最大出现次数; count 必须是非负整数。如果省略或为零,则将替换所有出现的事件。仅当与上一场比赛不相邻时,才会替换图案的空匹配,因此sub('x*', '-', 'abc')会返回'-a-b-c-'

答案 2 :(得分:2)

可选参数count是要替换的模式最大出现次数; count必须是非负整数。

re.sub(pattern, repl, string, count=0, flags=0)

将count = 1设置为仅替换第一个实例。

答案 3 :(得分:1)

我认为你的短语“一审”导致其他人在count方向回答,但如果你的意思是你想删除一个短语,只要它与你寻求的短语完全匹配,那么首先,你必须用“短语”来定义你的意思,例如非小写字符:

DON'T DELETE THIS

在这种情况下,您可以执行以下操作:

(?<![^a-z]+)\s+DELETE THIS\s+(?![^a-z]+)

我不确定Python是否允许任意长度的负反向断言。如果没有,请删除第一个+

答案 4 :(得分:0)

您可以使用str.replace()

In [9]: strs="I want to DELETE THIS go to DON'T DELETE THIS the supermarket"

In [10]: strs.replace("DELETE THIS","",1) # here 1 is the count
Out[10]: "I want to  go to DON'T DELETE THIS the supermarket"