您好我想使用python regex从<ul>
和<li>
标签中删除所有属性。以下是我的源字符串:
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>
<li id="ul0002-0003" num="0000">0.25 to 0.30 mg of drospirenone and</li>
<li id="ul0002-0004" num="0000">0.1 to 0.2 mg of cyproterone acetate,</li>peanut butter3
</ul>
我想输出的内容:
peanut butter1
<ul>peanut butter2
<li>2.0 to 6.0 mg of 17β-estradiol and</li>
<li>0.020 mg of ethinylestradiol;</li>
<li>0.25 to 0.30 mg of drospirenone and</li>
<li>0.1 to 0.2 mg of cyproterone acetate,</li>peanut butter3
</ul>
答案 0 :(得分:2)
import re
for line in open('sample.html'):
print re.sub('<(ul|li)[^>]*>', r'<\1>', line, flags=re.I),
以上将删除所有ul和li标签中的属性,无论一行上是否有一个或多个标签。此外,由于使用了re.I
,因此搜索不区分大小写,并且会找到<UL...
等标记并删除其属性。标签外的文字保持不变。
使用您的(修订的)示例html,上面的代码生成:
peanut butter1
<ul>peanut butter2
<li>2.0 to 6.0 mg of 17β-estradiol and</li>
<li>0.020 mg of ethinylestradiol;</li>
<li>0.25 to 0.30 mg of drospirenone and</li>
<li>0.1 to 0.2 mg of cyproterone acetate,</li>peanut butter3
</ul>
如果数据不是太长,可以一次处理所有数据,而不是一次处理一行:
import re
string = open('sample.html').read()
string = re.sub('<(ul|li)[^>]*>', r'<\1>', string, flags=re.I)
print string
答案 1 :(得分:1)
试试这个:
>>> xs='<li id="ul0002-0001" num="0000">2.0 to 6.0 mg of 17β-estradiol and</li>'
>>> p=r'(<li|<ul|</ul)[^>]*(>)(.*)'
>>> match=re.search(p,xs)
>>> ''.join([match.group(1),match.group(2),match.group(3)])
'<li>2.0 to 6.0 mg of 17β-estradiol and</li>'
>>> xs='<ul id="ul0002" list-style="none">'
>>> match=re.search(p,xs)
>>> ''.join([match.group(1),match.group(2),match.group(3)])
'<ul>'