4

所以现在,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 是一个变化的数字,所以我确实需要一个正则表达式。我怎样才能做到这一点?

4

5 回答 5

16

如文档中所写,re.sub(pattern, repl, string, count=0, flags=0)您可以count在以下位置指定参数:

    re.sub(pattern, repl, string[, count, flags])

如果您只给出 1 的计数,它只会替换第一个

于 2012-10-04T17:11:21.620 回答
3

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

可选参数count是要替换的模式出现的最大数量;count必须是非负整数。如果省略或为零,将替换所有匹配项。模式的空匹配仅在与前一个匹配不相邻时被替换,因此sub('x*', '-', 'abc')返回'-a-b-c-'

于 2012-10-04T17:14:29.357 回答
2

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

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

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

于 2012-10-04T17:11:17.413 回答
1

我认为您的措辞“第一个实例”导致其他所有人都朝着 的方向回答count,但是如果您的意思是仅当一个短语与您所寻找的短语完全匹配时才想删除它,那么首先您必须定义您的意思通过“短语”,例如非小写字符:

DON'T DELETE THIS

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

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

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

于 2012-10-04T17:32:27.977 回答
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"
于 2012-10-04T17:12:00.600 回答