小能豆

如何使用 python 正则表达式解析段落而不考虑 html 中应用的样式

py

我正在尝试创建一个Python函数(使用正则表达式),将包含“$$”的每个HTML段落替换为字母“1”。即使段落中存在一些样式,我也需要应用相同的样式,

s = "<p>adsadfsaaadsadsaExample String</p><p>$$</p>"
replaced = re.sub('<p>\$\$</p>', '1',s)
print (replaced)

预期输入:

<p>i have</p> <p style="text-align:justify">$$</p>
<p> asdas jas dafad</p>
<p>$$<p>
<p>asdasd</p>
<p><span>$$</span></p>

预期输出:

<p>i have</p> 1 
<p> asdas jas dafad</p>
1
<p>asdasd</p>
1

请帮忙


阅读 119

收藏
2023-09-26

共2个答案

小能豆

import re

pattern = r'\<p.*?\>.*?\<\/p\>'
html_str = '<p>i have</p> <p style="text-align:justify">$$</p><p> asdas jas dafad</p><p>$$</p><p>asdasd</p><p><span>$$</span></p>'
new_html_str = re.sub(pattern, lambda match: "1" if '$$' in match.group() else match.group(),s)
print(new_html_str)

prints - '<p>i have</p> 1<p> asdas jas dafad</p>1<p>asdasd</p>1'

我的回答完全基于你的方法,为了更好的解决方案,我建议解析html和过程。

2023-09-26
小能豆

要实现你的需求,你可以使用Python的re模块来处理HTML字符串并替换包含”$$”的每个段落。但是,你需要考虑一些HTML标签可能包含属性,所以最好使用正则表达式来匹配<p>标签及其内容,然后在替换时保留标签的其他属性。下面是一个示例代码:

import re

s = "<p>adsadfsaaadsadsaExample String</p><p>$$</p>"
replaced = re.sub(r'<p[^>]*>\$\$</p>', '<p>1</p>', s)
print(replaced)

这个代码将匹配包含”$$”的每个<p>标签,无论是否有其他属性,并将它们替换为<p>1</p>。这样,你就可以保留段落的其他属性和样式,而只替换其内容。输出应该符合你的预期。

2023-09-26