在表示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>/
有人可以帮助我了解我如何实现目标吗?
答案 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}}个元素。