Python正则表达式替换div

时间:2017-11-22 01:20:58

标签: python regex python-3.x

我正在尝试替换div class =&#34; one&#34;之间的所有文本。标签 到目前为止我的工作,但只有一切都在一条线上 <_ p>是

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

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

我尝试过re.MULTILINE,无处可去。我做错了什么?

2 个答案:

答案 0 :(得分:1)

只需将.替换为正则表达式中的[\s\S],如下所示:

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

Click for Demo

<强>解释

  • <div class=\"one\"> - 字面上匹配<div class="one">
  • [\s\S]*? - 尽可能少地匹配任何字符的出现次数(包括换行符)
  • <\/div> - 字面上匹配</div>

答案 1 :(得分: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>