提问人:prabu naresh 提问时间:9/2/2023 更新时间:9/2/2023 访问量:50
需要 Python 中正则表达式模式的帮助 – 解析复杂的 HTML 结构
Need Assistance with a regex pattern in Python – Parsing complex HTML structures
问:
我正在尝试使用 Python 的 re 模块解析复杂的 HTML 结构,但我的正则表达式模式遇到了障碍。这是我想做的:
我有包含嵌套元素的 HTML 文本,我想提取最内层标签的内容。但是,我似乎无法正确处理我的正则表达式模式。这是我正在使用的代码:
import re
html_text = """
<div>
<div>
<div>
Innermost Content 1
</div>
</div>
<div>
Innermost Content 2
</div>
</div>
"""
pattern = r'<div>(.*?)<\/div>'
result = re.findall(pattern, html_text, re.DOTALL)
print(result)
我希望这段代码返回最里面元素的内容,如下所示:
['Innermost Content 1', 'Innermost Content 2']
但它没有按预期工作。我的正则表达式模式做错了什么,我该如何修复它以达到预期的结果?任何帮助将不胜感激!
答:
0赞
sahar mirjavadi
9/2/2023
#1
您可以使用以下命令:
[re.sub(r'<div>|<\/div>|\s+', '', item) for item in result]
您也可以使用适当的 HTML 解析库,例如 BeautifulSoup:
# Parse the HTML with BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
# Find all <div> elements and extract their text
div_elements = soup.find_all('div')
for div in div_elements:
print(div.get_text())
2赞
smoks
9/2/2023
#2
尝试使用更改的模式和额外的行来尝试修改此代码以删除\n
import re
html_text = """
<div>
<div>
<div>
Innermost Content 1
</div>
</div>
<div>
Innermost Content 2
</div>
</div>
"""
pattern = r'<div>([^<]*?)<\/div>'
result = re.findall(pattern, html_text, re.DOTALL)
result = [content.strip() for content in result if content.strip()]
print(result)
0赞
LetzerWille
9/2/2023
#3
可以使用 re.split()
print([st.strip() for st in re.split(r'<div>\n?|<.div>\n?|\n', html_text) if not st.isspace() and st])
['Innermost Content 1', 'Innermost Content 2']
评论