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は負でない整数でなければなりません。省略またはゼロの場合、すべてのオカレンスが置き換えられます。パターンの空の一致は、前の一致に隣接していない場合にのみ置き換えられるため、をsub('x*', '-', 'abc')返します'-a-b-c-'

于 2012-10-04T17:14:29.357 に答える
2

オプションの引数カウントは、置き換えられるパターンオカレンスの最大数です。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 に答える