2

如果可能,我需要使用正则表达式围绕一长串项目添加无序列表标签。该文本是从文本文件中提取的,并在标记函数中进行处理,该函数包括许多不同的正则表达式,以用标记标记替换原始文本文件的某些元素。

* Item One
* Item Two
* Item Three
* Item Four

我目前有一个正则表达式函数来用列表标签替换星号,如下所示。

    <li>Item One</li>
    <li>Item Two</li>
    <li>Item Three</li>
    <li>Item Four</li>

如何使用正则表达式或递归/循环过程在列表的开头和结尾添加标签?在将 asterix 替换为列表标签之前或之后这样做会更好吗?

4

4 回答 4

0
In [1]: '<ul>' + ''.join(['<li>'+l[2:]+'</li>' for l in open('foo.txt') if l.startswith('*')]) + '</ul>'
Out[1]: '<ul><li>Item One\n</li><li>Item Two\n</li><li>Item Three\n</li><li>Item Four\n</li></ul>'
于 2012-05-23T06:52:09.913 回答
0

Let's say you already removed the * and added the elements to a list:

items = ["Item One", "Item Two", "Item Three", "Item Four"]

You could now:

html_items = '<ul>\n<li>' + '</li>\n<li>'.join(items) + '</li></ul>'
print html_items

Output:

<ul>
<li>Item One</li>
<li>Item Two</li>
<li>Item Three</li>
<li>Item Four</li>
</ul>
于 2012-05-23T08:24:30.370 回答
0

这是我的解决方案lxml

from lxml.builder import E
from lxml import etree

items = ['item 1', 'item 2', 'item 3']
ul = E.ul()
for item in items:
    ul.append(E.li(item))
print etree.tostring(ul, pretty_print=True)

上面的代码将输出:

<ul>
  <li>item 1</li>
  <li>item 2</li>
  <li>item 3</li>
</ul>
于 2012-05-23T06:56:59.147 回答
0
with open('file.txt') as f:
    for line in f:
        if line.startswith('*'):
            print '<li>' + line[2:] + '</li>'
于 2012-05-23T06:42:10.310 回答