匹配两个标签之间的所有换行符

时间:2017-09-07 03:20:09

标签: regex

在表示html标记的字符串中,我需要删除任何<ul></ul>之间的所有换行符。这是一个示例字符串:

<ul>\n<li>element 1\n</li>\n<li>element 2\n</li>\n</ul><p>Hello there</p>

因此\n内的所有<ul></ul>都需要删除。

我已尝试过以下操作,但它似乎无法正常工作:

https://regex101.com/r/qLxSys/1

/<ul>.*?(\n)?.*?<\/ul>/

有人可以帮助我了解我如何实现目标吗?

1 个答案:

答案 0 :(得分:1)

要匹配<ul>标记之间的换行符,您可以使用: (?<=<ul>).*?(\n).*(?=<\/ul>)

第1组仅匹配\n内的一个<ul>字符。 所以我建议你通过非匹配的子串迭代地替换字符串(即每个\n替换左边的<ul>\n之间的子串; \n<\ul>之间的子串#!python3 import re string = "<ul>\n<li>element 1\n</li>\n<li>element 2\n</li>\n</ul>\n<p>Hello there</p>" pattern = re.compile(r'(?<=<ul>)(.*?)(\n)(.*)(?=<\/ul>)(?su)') while pattern.search(string): string = pattern.sub(r'\g<1>'+r'\g<3>', string) print(string) 在右边)。此实现取决于您的编程语言:

在Python3中:

\n

在上面的示例中,最后<ul>未被替换,因为它不在<ul>之间。

另一个更清洁的解决方案是使用正则表达式匹配&#39; \ n&#39;使用html解析器(例如python中的beautifulsoup)后的字符只能获取{{1}}个元素。