考虑空格时,正则表达式会失败

时间:2019-04-23 08:27:27

标签: python regex

我正在将正则表达式应用于以下字符串:

mystring = '[<tr class="v" id="ctl00_PlaceHolderHalf_ctl01_rot2">
<td><div class="tore_karten"><div style="float:left;padding-right:2px;">Dortmund: </div><a class="link_noicon" href="/news/fussball/bundesliga/vereine/1-bundesliga/2000-01/borussia-dortmund-17/24285/spieler_evanilson.html" style="float:left;">Evanilson</a><div style="float:left;padding-left:2px;">(90., grobes Foulspiel, <a class="link_noicon" href="/news/fussball/bundesliga/vereine/1-bundesliga/2018-19/bayern-muenchen-14/223/spieler_paulo-sergio.html" style="">Paulo Sergio</a>)</div><div class="sep3"></div><div style="float:left;padding-right:2px;">Bayern: </div><a class="link_noicon" href="/news/fussball/bundesliga/vereine/1-bundesliga/2000-01/bayern-muenchen-14/396/spieler_stefan-effenberg.html" style="float:left;">Effenberg</a><div style="float:left;padding-left:2px;">(55., grobes Foulspiel, <a class="link_noicon" href="/news/fussball/bundesliga/vereine/1-bundesliga/2018-19/borussia-dortmund-17/22046/spieler_otto_addo.html" style="">Evanilson</a>)</div><br style="clear:both;"/>
</div>
</td>
</tr>]'

背景:应该是从足球网站上捕获暂停的球员。我想匹配那些实际上被送走的球员(更具体地说,他们的ID包含在URL中),但字符串还包含犯规的球员。

这给出了mystring中包含的所有四个玩家ID的列表:

import re
re.findall('href=".+?/(\d+?)/spieler_.+?.html"', mystring)

['24285', '223', '396', '22046']

这太宽容了,因为玩家22322046没有被送走。可以通过使用右括号来区分这两种情况。但是,我无法指定正确的regex。以我的理解,这应该可行,但是会产生一个空列表:

re.findall('href=".+?/(\d+?)/spieler_.+?.html"\s>.+?</a><div', mystring)

所需结果:['24285', '396']。我感到自己.html之后错误地对待空白。我该如何指定正则表达式?

1 个答案:

答案 0 :(得分:1)

我不确定您为什么使用正则表达式在结构化信息中查找数字。无论如何,您可以使用此正则表达式:

import re
re.findall('<\/div><a.*?href=\".+?\/(\d+?)\/spieler_.+?.html\"', mystring)

输出:

['24285', '396']
相关问题