2011-10-10 3 views
0

私は「最初のと交換してください! 『に囲まれている文字列をつかむしようとしています』と 『_』たとえばPythonのre.sub()

:!。 STR( !!!テスト)ストリップ() ​​- > STR(_テスト)ストリップ()ここで

は、私がこれまで持っているコードです:私はあまりつかむこのコードとその結果に

print re.sub(r'!.*?!','!_', 'str(!test!).strip()') 

!。 is: str(!_)。strip()

どのように最初の "!"をゼロにするかについての考え。または、代わりに、文字列を "!!"でつかむ方法がありますか? "!_" + "!"を追加します。その文字列をarround?

答えて

0

"単語"の後半を括弧でグループ化し、置換文字列\g<1>でそのグループを使用する必要があります。あなたは()を維持したいREの一部をキャプチャし、その後、代わりに.

[^!]を使用し、置換文字列で、へ\1を使用します!

re.sub(r'!(.*?!)', '!_\g<1>', 'str(!test!).strip()') 
+2

技術的には、CharStringの最初の解決策があなたが望むものです。私はPythonが先読みしていたことを忘れていました。より効率的で理解しやすいでしょう。 – mybluevan

1
print re.sub(r'!(?=.*?!)', '!_', 'str(!test!).strip()') 

肯定先読みを使用します。

print re.sub(r'!(.*?)!', r'!_\1!', 'str(!test!).strip()') 

逆参照を使用します。

1

はsが間の文字から!除外するもう一度挿入してください。

print re.sub(r'!([^!]*!)', r'!_\1', 'str(!test!).strip()') 
関連する問題