Python Regex - 识别列表中的第一个和最后一个项目

use*_*018 7 python regex

我需要将一些文本文件转换为HTML代码.我坚持将列表转换为HTML无序列表.示例来源:

文档中的一些文本
*项目1
*项目2
*项目3
其他一些文本

输出应该是:

some text in the document
<ul>
    <li>item 1</li>
    <li>item 2</li>
    <li>item 3</li>
</ul>
some other text
Run Code Online (Sandbox Code Playgroud)

目前,我有这个:

r = re.compile(r'\*(.*)\n')
r.sub('<li>\1</li>', the_text_document)
Run Code Online (Sandbox Code Playgroud)

这会创建一个没有< ul >标签的HTML列表.
如何识别第一个和最后一个项目并用< ul >标签包围它们?

use*_*018 1

在考虑了一些想法之后,我决定使用第二个正则表达式。所以基本上,在运行第一个正则表达式(来自我原来的帖子,创建标签<li>)之后,我运行:

r = re.compile(r'(<li>.*?</li>\n(?!\s*<li>))', re.DOTALL)
r.sub('<ul>\\1</ul>', string_with_li_tags)
Run Code Online (Sandbox Code Playgroud)

这将找到标签的第一个匹配项<li>和组合的最后一个匹配项</li>\n,而不是后跟<li>标签(本质上意味着整个列表)并添加<ul>标签。

编辑:我稍微修改了正则表达式,这样它就不会贪婪了。这样它就可以处理同一文档中的多个列表。唯一的要求是列表项之间没有空格,正如下面提到的@Aprillion

编辑2:修改了否定前瞻以处理列表项之间的空格,因此涵盖了所有情况