我需要按特定数量的标签分割字符串 (<li>, <lu> ...)
。我想出了正则表达式
pattern = <li>|<ul>|<ol>|<li>|<dl>|<dt>|<dd>|<h1>|<h2>| <h3>|<h4>|<h5>|<h6>
和 re.split
基本上它可以完成工作
test_string = '<p> Some text some text some text. </p> <p> Another text another text </p>. <li> some list </li>. <ul> another list </ul>' res = re.search(test_string, pattern) -> `['<p> Some text some text some text. </p> <p> Another text another text </p>. ', ' some list </li>. ', ' another list </ul>']`
但我想捕获开始和结束标签并将标签保留在分割文本中。类似的东西
['<p> Some text some text some text. </p> <p> Another text another text </p>. ', '<li> some list </li>. ', '<ul>another list </ul>']`
P粉7878060242024-04-01 10:26:40
回答您的具体问题:
<(p|li|ul|ol|dl|h1|h2|h3|h4|h5|h6)>[^<]*>
并且匹配而不是拆分。
\1
指的是开始标记中捕获的内容。
类似于:
for match in re.finditer(r"<(p|li|ul|ol|dl|h1|h2|h3|h4|h5|h6)>[^<]*>", subject, re.DOTALL):
但是,在大多数真实情况下,这不足以处理 HTML,您应该考虑 DOM 解析器。