通过以下HTML代码制作国家/地区智能播放器列表
<ul>
<li>
Australia
<ol>
<li>Steven Smith</li>
<li>David Warner</li>
</ol>
</li>
<li>
Bangladesh
<ol>
<li>Mashrafe Mortaza</li>
<li>Tamim Iqbal</li>
</ol>
</li>
<li>
England
<ol>
<li>Eoin Morgan</li>
<li>Jos Buttler</li>
</ol>
</li>
</ul>
澳大利亚 - 史蒂文史密斯,大卫华纳
孟加拉国 - Mashrafe Mortaza,Tamim Iqbal
英格兰 - Eoin Morgan,Jos Buttler
效果很好。我正在寻找更好的代码。请帮帮我。
import re
with open('playerlist.html', 'r') as f:
text = f.read()
mytext = re.sub(r'[\n\t]', '', text)
pat = r'<li>(\w+?)<ol><li>(\w+\s?\w+)</li><li>(\w+\s?\w+)</li>'
cpat = re.compile(pat)
result = cpat.findall(mytext)
for a,b,c in result:
print('{0}- {1}, {2}'.format(a,b,c))
答案 0 :(得分:0)
使用正则表达式解析xml / html数据从来都不是一个好主意。
使用xml / html解析器。
xml.etree.ElementTree 模块的正确方法(其中一个解析器。您可以尝试其他解析器):
import xml.etree.ElementTree as ET
root = ET.parse('playerlist.html').getroot()
for li in root.findall('.//li[ol]'):
print(li.text.strip(), '- {}, {}'.format(*(i.text.strip() for i in li.findall('ol/li'))))
输出:
Australia - Steven Smith, David Warner
Bangladesh - Mashrafe Mortaza, Tamim Iqbal
England - Eoin Morgan, Jos Buttler
答案 1 :(得分:0)
将换行符和制表符替换为“”之后,我的正则表达式模式如下所示。
r'<li>\s*(\w+?)\s*<ol>\s*<li>\s*(\w+\s?\w+)\s*</li>\s*<li>\s*(\w+\s?\w+)\s*</li>'