使用splitlines()拆分html字符串仍留有空间

时间:2018-01-12 16:57:50

标签: python

我试图将以下html字符串(示例缩短)拆分为选项列表。 (html字符串是通过ajax在前端使用innerHTML从前端发送的)

然而,当我使用str.splitlines()时,我仍然留下空字符串和空格。

输入:

<option value="" selected="">---------</option>

  <option value="1">Option 1</option>

  <option value="2">Option 2</option>

输出:

<class 'list'>: ['', '  <option value="" selected="">---------</option>', '', '  <option value="1">Option 1</option>', '', '  <option value="2">Options 2</option>', '', '   ']

有没有更好的方法将字符串拆分成选项列表?

(注意我可以选择更改前端,如果这是更简单的方法)

1 个答案:

答案 0 :(得分:1)

是的,str.splitlines()不会删除空行。 method documentation包含一个示例,说明了会发生什么:

>>> 'ab c\n\nde fg\rkl\r\n'.splitlines()
['ab c', '', 'de fg', 'kl']

\n\n双换行符分隔3行,中间一行为空。

如果必须在行上拆分并删除空行,前导和尾随空格,请使用正则表达式:

import re

lines = re.split('[ ]*\n+[ ]*', inputtext.strip())

额外的str.strip()调用会完全删除初始和尾随空格,否则您将在开头和结尾处获得空字符串。

演示:

>>> import re
>>> inputtext = '''\
...
... <option value="" selected="">---------</option>
...
...   <option value="1">Option 1</option>
...
...   <option value="2">Option 2</option>
...
...     '''
>>> inputtext.splitlines()
['', '<option value="" selected="">---------</option>', '', '  <option value="1">Option 1</option>', '', '  <option value="2">Option 2</option>', '', '    ']
>>> re.split('[ ]*\n+[ ]*', inputtext.strip())
['<option value="" selected="">---------</option>', '<option value="1">Option 1</option>', '<option value="2">Option 2</option>']

但是,对于解析HTML,您可能希望查看类似BeautifulSoup的库。