gpt4 book ai didi

python - 匹配多个包含括号内文本的完整 HTML 段落

转载 作者:行者123 更新时间:2023-12-01 08:01:09 28 4
gpt4 key购买 nike

我需要匹配包含三个大括号之间的文本的完整 HTML 段落。

这是我输入的 HTML:

<p><strong>{{{Lorem ipsum dolor sit amet.</strong></p>
<p>Ut enim ad minim veniam.</p>
<p>Duis aute irure dolor}}}</p>
<p><em>Excepteur sint occaecat cupidatat non proident.</em></p>
<p><strong><em>Sed {{{ut perspiciatis unde omnis iste natus error.</em></strong><em> sit voluptatem accusantium doloremque laudantium.</em></p>
<p>Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet.}}}</p>
<p>Ut enim ad minima veniam, quis nostrum exercitationem.</p>

应匹配以下片段:

<p><strong>{{{Lorem ipsum dolor sit amet.</strong></p>
<p>Ut enim ad minim veniam.</p>
<p>Duis aute irure dolor}}}</p>

<p><strong><em>Sed {{{ut perspiciatis unde omnis iste natus error.</em></strong><em> sit voluptatem accusantium doloremque laudantium.</em></p>
<p>Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet.}}}</p>

目前我正在尝试使用以下正则表达式:

<p>.*?{{{.*?}}}<\/p>/gms

显然,它无法正常工作。

这是一个 Regex101 示例:https://regex101.com/r/9NSMy3/2

我知道使用正则表达式解析 HTML 不是最好的主意,因此任何其他解决方案也受到高度赞赏。

最佳答案

您可以使用 HTML 解析器查找所有 p 元素,检查每个元素是否与 in 运算符匹配,并将匹配项存储在列表中。在这里,我使用 begin 标志检查之前是否已经看到一组左括号(以跟踪正在进行的匹配)。

from bs4 import BeautifulSoup

inputhtml = '''
<p><strong>{{{Lorem ipsum dolor sit amet.</strong></p>
<p>Ut enim ad minim veniam.</p>
<p>Duis aute irure dolor}}}</p>
<p><em>Excepteur sint occaecat cupidatat non proident.</em></p>
<p><strong><em>Sed {{{ut perspiciatis unde omnis iste natus error.</em></strong><em> sit voluptatem accusantium doloremque laudantium.</em></p>
<p>Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet.}}}</p>
<p>Ut enim ad minima veniam, quis nostrum exercitationem.</p>
'''

soup = BeautifulSoup(inputhtml,'html.parser')

fragments = []
begin = False
for p in soup.find_all('p'):
if '{{{' in p.text:
begin = True
fragments.append(str(p))
if '}}}' in p.text:
begin = False
if '}}}' in p.text and not '{{{' in p.text:
fragments[-1] += str(p)
elif begin and not '{{{' in p.text and not '}}}' in p.text:
fragments[-1] += str(p)

print(fragments)

输出:

['<p><strong>{{{Lorem ipsum dolor sit amet.</strong></p><p>Ut enim ad minim veniam.</p><p>Duis aute irure dolor}}}</p>',
'<p><strong><em>Sed {{{ut perspiciatis unde omnis iste natus error.</em></strong><em> sit voluptatem accusantium doloremque laudantium.</em></p><p>Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet.}}}</p>']

关于python - 匹配多个包含括号内文本的完整 HTML 段落,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55724571/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com