2016-05-18 14 views
0

私は以下の文字列を持っています:"n && && && && && &&n"&&andに置き換えたいのですが、その前後に空白を持つ&&のものだけを代入したいと思います。Pythonの正規表現代入

私は以下のコード使用しています:私はつもりですどこ誰かが私に教えてくださいすることができn and and and and and &&n

import re 
str = input() 
change = re.sub(r' (&&) ', ' and ', str) 
print (change) 

をしかし出力のように来ている:n and && and && and &&n

正しい出力があるべき違う?

答えて

0

あなたの正規表現はしません1回の置換を行った後に再び終了スペースを見ると、チェックされた次の文字は "& & ..."になります。代わりに、それに代わるのスペースの代わりに「先読み」:あなたの表現で

change = re.sub(r' (&&)(?=)',' and',str) 
0

冒頭の「n & &」の問題は、最初の置換マッチで取り上げられることです。 & &の後のスペースが削除されると(ただし、 'and'のスペースで置き換えられます)、別のマッチでは使用できません。最も簡単な解決のために - -

良いニュースは、あなたのサブパスの後に連続し& &秒で終わる、決してだろうということであるあなただけの二回、サブを実行することができます。

In [7]: input_str = 'n && && && && && &&n' 

In [8]: first_sub = re.sub(r' (&&) ', ' and ', input_str) 

In [9]: second_sub = re.sub(r' (&&) ', ' and ', first_sub) 

In [10]: print second_sub 
n and and and and and &&n 
1

、あなたが二回にカウントされるように、スペースを期待しているが、&&後のスペースはスペースとしてカウントされることが利用できなくなります次の前は&&です。

>>> import re 
>>> s = 'n && && && && && &&n' 
>>> change = re.sub(r'(?<=)(&&)(?=)', 'and', s) 
>>> print (change) 
n and and and and and &&n 

これらは、実際にそれらを消費することなく、特定の一致を「調べる」ものです。あなたは実際にはandに興味があります。スペースに囲まれているだけです。

また、変数名にstrを指定しないでください。または、組み込み関数str()にアクセスするのが難しくなります。