我需要以特定數量的標籤分割字串 (<li>, <lu> ...)
。我想出了正規表示式
pattern = <li>|<ul>|<ol>|<li>|<dl>|<dt>|<dd>|<h1>|<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 解析器。