2017-11-22 10 views
1

divクラス= "one"タグ間のすべてのテキストを置き換えようとしています これまでのことは、すべてが1行にある場合に限り動作します。
text_msgは私がre.MULTILINEを試してみましたPython正規表現div間の置換

text = re.sub('<div class="one">.*?</div>',new_text,text_msg,re.DOTALL) 

<div class="one">replace this 
more text here 
another line 
</div> 

で、どこにもなっていません。私は間違って何をしていますか?

+0

に一致し、必要['re.DOTALL'](https://docs.python.org/3/library/re.html#re.DOTALL)フラグを使用します。 – eugenhu

+0

@eugenhuあなたはその質問を読んだことがありますか? –

+0

@TimBiegeleisen Woops、明らかに申し訳ありません。 – eugenhu

答えて

0

re.subに行って修正しました。現在のコードの問題は、フラグを指定するためにキーワードflagsを使用していないことです。私はまた、前駆パターン(?<=<div class="one">)とポストパターン(?=<\/div>)を探すようにあなたの正規表現を変更しました。

import re 

text_msg = """ 
<html> 
<head> 
<title>Terrible webpage</title> 
</head> 
<body> 

<div class="one">Cool text!</div> 
<b>test</b> 
<div class="one">Second text!</div> 
<div class="one">third text!</div> 
<div class="one">replace this 
more text here 
another line 
</div> 

</body> 
</html> 
""" 

print(re.sub('(?<=<div class="one">).*?(?=<\/div>)',"out",text_msg,flags=re.DOTALL)) 

出力:以下に示すように

<html> 
<head> 
<title>Terrible webpage</title> 
</head> 
<body> 

<div class="one">out</div> 
<b>test</b> 
<div class="one">out</div> 
<div class="one">out</div> 
<div class="one">out</div> 

</body> 
</html> 
+0

ご協力いただきありがとうございます。 – user3525290

1

ちょうどあなたの正規表現で[\s\S].を置き換える:

<div class=\"one\">[\s\S]*?<\/div>

Click for Demo

説明:

  • <div class=\"one\"> - 文字通り<div class="one">
  • [\s\S]*?と一致する - 任意の文字の一致0+出現は、(改行文字が含まれる)、
  • <\/div>可能な限り少なく - 文字通り</div>
+0

アドバイスをいただきありがとうございます。 – user3525290