2017-12-01 2 views
0

生のHTMLがあり、この[%〜as..abcd〜%]のようなブロック全体を出力文字列から削除しようとしています。 Pythonのライブラリを再利用する[%〜abcd〜%]の間にPython正規表現がコンテンツを削除できません

teststring = "Check the direction . [%~ MACRO wdwDate(date) BLOCK; 
       SET tmpdate = date.clone(); 
       END ~%] Determine if both directions." 
cleanM = re.compile('\[\%\~ .*? \~\%\]') 
scleantext = re.sub(cleanM,'', teststring) 

コードで何が間違っていますか?

+1

デフォルトでは、 '.'は改行文字と一致しません。あなたは 're.DOTALL'フラグを使わなければなりません。 '%'、 ']'、 '〜'は特殊文字ではないので、エスケープする必要はありません。パターンのコンパイル時には、最後の行は次のようになります: 'scleantext = cleanM.sub( ''、teststring)' –

+1

'%'、 ']'、 '〜' –

答えて

1

あなたのパターンは

cleanM = re.compile(r'\[\%\~ .*? \~\%\]',re.S) 

.は改行以外の任意の文字に一致しなければなりません、S

+0

re.Sを使用する場合は、 're.compile'を使用する必要があります。 – mrCarnivore

+0

マーカをマッチから除外することもできます: 'r '(?<= \ [%〜)。*(?= \〜%])' ' 。 BTW:正規表現には常に生の文字列( 'r '...'')を使用してください。 –

0

があなたの代わりに.*[\S\s]*を使用する必要が改行に一致させることができます、あなたは、コンパイルを残すことができます:

import re 
teststring = '''Check the direction . [%~ MACRO wdwDate(date) BLOCK; 
       SET tmpdate = date.clone(); 
       END ~%] Determine if both directions.''' 
scleantext = re.sub('(\[%~ [\S\s]* ~%\])', '', teststring) 

print(scleantext) 
関連する問題