我试图将以下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>', '', ' ']
有没有更好的方法将字符串拆分成选项列表?
(注意我可以选择更改前端,如果这是更简单的方法)
答案 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的库。