2015-12-13 17 views
10

re.sub()は修正済み/未修正の文字列全体を返しますのでre.sub()の出力を検索せずにre.sub()が正常にテキストを修正したかどうかを確認する方法はありますか?次のコードがある場合はre.sub()がPythonで正常に置き換えられたかどうかをチェックする方法?

+0

なぜ正しく置き換えられないのですか?内部に一致するものがあるかどうかを知る前に、 're.match()'で正規表現の文字列をチェックすることができます。 – nipeco

+0

私は、「re.sub()が置換を行うかどうかをどうやって伝えることができるか」という質問があると仮定しました。 – Jon

+0

実際に何をしようとしていますか? –

答えて

3

import re 
s1 = "aaa" 
result = re.sub("a", "b", s1) 

をあなたはそうのようにS1に結果のIDを比較することにより、サブ行わsubsitutionsに電話をかどうかを確認することができます

id(s1) == id(result) 

か、あります同じ:

s1 is result 

これは、Pythonの文字列が不変であるため、任意の置換ar eの場合、結果は元の文字列とは異なる文字列になります(つまり、元の文字列は変更されません)。文字列の内容ではなく比較のためにIDを使用する利点は、比較が線形の代わりに一定の時間であることです。

+2

ダウンボックスを理解できません。私はこれが機能することを確認した。これは、「パターンが見つからない場合は、文字列は変更されずに返されます。まあ、それは明示的に "同じ物体"とは言わないので、いつか中断するかもしれませんが、OPが比較を避けて死んだ場合、これが私達が提供できる最高です。 –

+1

're.sub(s1、" a "、" b ")答えの文脈で意味をなさない –

+1

パトリック、ありがとう私はこれを反映する答えを変更しました – Jon

8

あなたが)(サブと同様の動作を行うre.subnを使用するが、改変の数は0すなわち文字列が変更されていない場合(new_string、number_of_subs_made)

タプルを返すことができます。

>>> re.subn('(xx)+', '', 'abcdab') 
('abcdab', 0) 
>>> re.subn('(ab)+', '', 'abcdab') 
('cd', 2) 
>>> 
+0

Praveenに感謝します。これは変更に関する情報を提供します。 –

関連する問題