2016-10-12 7 views
1

現在、静的テキストと変数値(中括弧で囲まれています)を含むテキスト処理スクリプトを作成しています。中括弧で囲まれた改行文字を削除します

Some text\nwith a {variable\n} value"

に:さらに下処理で

Some text\nwith a {variable} value"

私はすでにやっている私は、彼らが中括弧の間に表示された場合にのみ改行文字を取り除くことができるようにする必要がありますこの:

re.sub(r'\{.*?\}', '(.*)', text, flags=re.MULTILINE|re.DOTALL)

しかし、私はどのようにわかりません中括弧で囲まれた文字列ではなく改行文字だけを対象とします。

Some text\nwith a {variable\n\n\n} value"


あなたはre.subにラムダにマッチオブジェクトを渡すと{...}内のすべての改行を置き換えることはPython 3.xの

+0

置換パターンには、特別な置換構文とリテラルのみを含めることができます。 –

+0

アサーションを使用して、空の文字列 ''''で置換するか、置換文字列をグループ化し、置換文字列の後部参照を使用するか –

答えて

2

を使用する:複数の改行の可能性もある

import re 
text = 'Some text\nwith a {variable\n} value"' 
print(re.sub(r'{.*?}', lambda m: m.group().replace("\n", ""), text, flags=re.DOTALL)) 

online Python 3 demo

を参照してください。それはの振る舞いを再定義する、とあなたは現在の式で {}をエスケープする必要はありません何の ^/ $アンカーを持っていないとして、あなたは、この正規表現で re.MULTILINEフラグを必要としないこと10

注意(過度のバックスラッシュなしで、正規表現がきれいに見えます)。

2

あなたが{...}の間で改行を置き換えるために、この先読み正規表現を使用することができ、非ネストされた、バランスの取れた括弧持ってと仮定:

>>> s = "Some text\nwith a {variable\n} value" 
>>> print re.sub(r'\n(?=[^{}]*})', '', s) 
Some text 
with a {variable} value 

(?=[^{}]*})する{かを照合することなく、我々が先に改行の閉鎖}を持って主張する先読みであります}を終了する前に}

関連する問題