2017-09-26 11 views
1

論理 "または"演算子(||)を検索して置換したいと思います。どうしたらいいですか?続きRegex Pythonを使用してシーケンスから論理 'または'演算子(||)を見つける方法

は、コードですが、私はしようとしている

import re 
sequence = "if(ab||2) + H) then a*10" 
expr = re.sub(r"||","_or_",sequence) 
print (expr) 

予想答えは '|' は特殊文字であるため、あなたがここにescape sequence '\' を使用する必要が

if(ab_or_2) + H) then a*10 
+4

'.replace(" || "、" _or _ ")'はなぜですか? –

+0

私は正規表現でどのようにできるのかを知りたいので。 – Naeem

+1

@Naeemしかし、正規表現の機能は必要ありません – khelwood

答えて

0

でなければなりません。

Python docs

'|'

A | B(AとBは任意のREとすることができます)は、AまたはBと一致する通常の 式を作成します。任意の数のREを に '|'この方法では。これは グループ内でも使用できます(下記参照)。ターゲット文字列がスキャンされると、REs は '|'で区切られます。左から右へ試行されます。

だから、実行する必要があります。

expr = re.sub(r"\|\|","_or_",sequence) 

または、re.escape()を使用して:

expr = re.sub(re.escape("||"),"_or_",sequence) 

これを指摘して@Stevenのおかげでそして、あなたが取得します:

IN : sequence = "if(ab||2) + H) then a*10" 
OUT : 'if(ab_or_2) + H) then a*10' 

編集:

regexを単に使用する必要がない場合は、文字列にreplaceを直接使用できます。すなわち、

sequence.replace('||','_or_') 

ここでは、特殊文字について心配する必要はありません。

+1

また、任意の文字列リテラルをエスケープするために 're.escape()'を使うこともできます: 're.sub(re.escape(" || ")、" _ or _ "、sequence)' –

+0

それを指摘してくれてありがとう。そのビットも追加します。 –

+1

ありがとう、ありがとうございました – Naeem

関連する問題