关于正则表达式的查询

2024-09-20 22:21:43 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我得到了一个HTML文件,其中包括一些国家的名称和两个球员从该国。我必须阅读该html文件,并显示国家和球员的名字在一个特定的格式使用正则表达式。你知道吗

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>

我必须以这种形式展示:

Australia - Steven Smith, David Warner
Bangladesh - Mashrafe Mortaza, Tamim Iqbal
England - Eoin Morgan, Jos Buttler

我试过了,但到目前为止还没有成功。到目前为止我能想到的是:

>> with open("test.html","r") as f:
      text = f.read()
>> import re
>> pq = re.findall(r'^<li>\n(.+?)\n\t<ol>\n\t<li>(.+?)</li>\n\t<li>(.+?)
               </li>$',text,re.M)

输出如下所示:

[('Australia', ' Steven smith ', ' David Warner '),
('Bangladesh', ' Mashrafe Mortaza ', ' Tamim Iqbal  '),
('England', ' Eoin Morgan ', ' Jos Buttler ')]

这不是我想要的。国名似乎不错。但是玩家的名字包含标签。我对正则表达式不太熟悉,我不太清楚在这里该做什么。任何帮助都将不胜感激。你知道吗


Tags: lidavidolwarnerstevenaustraliamorganjos
1条回答
网友
1楼 · 发布于 2024-09-20 22:21:43

您可以结合使用解析器和正则表达式:

from bs4 import BeautifulSoup
import re

rx = re.compile(r'''
    ^
    (?P<country>\w+)\s*
    (?P<player1>.+)[\n\r]
    (?P<player2>.+)''', re.MULTILINE | re.VERBOSE)

soup = BeautifulSoup(your_string_here, 'lxml')

players = ["{} - {}, {}".format(m.group('country'), m.group('player1').strip(), m.group('player2').strip()) 
            for item in soup.select('ul > li')
            for m in rx.finditer(item.text)]
print(players)

这就产生了

['Australia - Steven smith, David Warner', 'Bangladesh - Mashrafe Mortaza, Tamim Iqbal', 'England - Eoin Morgan, Jos Buttler']

相关问题 更多 >

    热门问题