我正在尝试替换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,无处可去。我做错了什么?
答案 0 :(得分:1)
只需将.
替换为正则表达式中的[\s\S]
,如下所示:
<div class=\"one\">[\s\S]*?<\/div>
<强>解释强>
<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>