使用python正则表达式打开<;ul>&书信电报;李>;并将无界项添加到列表中
我想将我的文本放在下面,并将其组合成如下所示的对象列表。我知道这可以通过正则表达式来实现。请帮忙 正在启动html文本:使用python正则表达式打开<;ul>&书信电报;李>;并将无界项添加到列表中,python,regex,html-lists,Python,Regex,Html Lists,我想将我的文本放在下面,并将其组合成如下所示的对象列表。我知道这可以通过正则表达式来实现。请帮忙 正在启动html文本: peanut butter1 <ul id="ul0002" list-style="none">peanut butter2 <li id="ul0002-0001" num="0000">2.0 to 6.0 mg of 17β-estradiol and</li> <li id="ul0002
peanut butter1
<ul id="ul0002" list-style="none">peanut butter2
<li id="ul0002-0001" num="0000">2.0 to 6.0 mg of 17β-estradiol and</li>
<li id="ul0002-0002" num="0000">0.020 mg of ethinylestradiol;</li>
<br>
<li id="ul0002-0003" num="0000">0.25 to 0.30 mg of drospirenone and</li>peanut butter3
</ul>peanut butter4
花生酱1
花生酱2
list = [
['peanut butter1', 'no tag'],
['peanut butter2', 'ul'],
['2.0 to 6.0 mg of 17β-estradiol and', 'li'],
['0.020 mg of ethinylestradiol;', 'li'],
['<br>', 'no tag'],
['0.25 to 0.30 mg of drospirenone and', 'li'],
['peanut butter3', 'no tag'],
['peanut butter4', 'no tag'],
]
列表=[
[“花生酱1”,“无标签”],
[‘花生酱2’,‘ul’],
['2.0至6.0 mg 17β;-雌二醇和'li'],
['0.020毫克乙炔雌二醇;','li'],
[“
”,“无标签”],
['0.25至0.30 mg屈螺旋酮和'li'],
[“花生酱3”,“无标签”],
[“花生酱4”,“无标签”],
]
我同意前面关于解析HTML的评论。但是,为了好玩并假设是逐行解析,您可以尝试以下方法:
ss="""
peanut butter1
<ul id="ul0002" list-style="none">peanut butter2
<li id="ul0002-0001" num="0000">2.0 to 6.0 mg of 17β-estradiol and</li>
<li id="ul0002-0002" num="0000">0.020 mg of ethinylestradiol;</li>
<br>
<li id="ul0002-0003" num="0000">0.25 to 0.30 mg of drospirenone and</li>peanut butter3
</ul>peanut butter4
"""
import re
tags = re.compile (r".*?<([^/]\w*?) .*?>(.*?)</\1>") # find tag like <li ...>...</li>
start = re.compile(r".*?<([^/]\w*?) .*?>(.*)") # find starting tags with attributes
end = re.compile(r"</.*?>")
r=[]
for s in ss.split("\n"):
if not s.strip(): continue
st = re.match(start,s)
if st: # start tag exists
m = re.match(tags,s)
if m: # full terminated tag
r.append(list(reversed(m.groups())))
extra = s[m.end():].strip()
if extra:
r.append([extra,"no tag"])
else: # half tag start
r.append(list(reversed(st.groups())))
else: # no start tag
s = re.sub(end, "", s) # remove closing tags
r.append([s.strip(),"no tag"])
print "\n".join([str(s) for s in r])
ss=”“”
花生酱1
花生酱2
2.0至6.0毫克的17-雌二醇和
0.020毫克乙炔雌二醇
0.25至0.30毫克屈螺旋酮和花生酱3
花生酱4
"""
进口稀土
tags=re.compile(r“.*?(.*?))#查找像
start=re.compile(r.“*?(.*))#查找具有属性的起始标记
end=re.compile(r“”)
r=[]
对于ss.split中的s(“\n”):
如果不是s.strip():继续
st=重新匹配(开始,s)
如果st:#开始标记存在
m=重新匹配(标签,s)
如果m:#完全终止标记
r、 追加(列表(反向(m.groups()))
extra=s[m.end():].strip()
如果额外:
r、 追加([额外,“无标记”])
其他:#半标签开始
r、 追加(列表(反向(st.groups()))
其他:#无开始标记
s=re.sub(结束,“,s)#删除结束标记
r、 追加([s.strip(),“无标记”])
打印“\n”.join([str(s)表示r中的s])
希望这有帮助 不!不要使用正则表达式来解析HTML!您可能应该使用类似于
BeautifulSoup
的东西。请阅读:Answer正则表达式不适合解析任意嵌套的结构。改用解析器。好的,谢谢大家的指导。我已经用了相当多的有限刮削。当htlm编写得不好时(例如,不平衡的标记),它有时比实际的解析器甚至BS更健壮,并且可以更快。