Regex терпит неудачу при учете пустого пространства - PullRequest
0 голосов
/ 23 апреля 2019

Я применяю регулярные выражения к следующей строке:

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>]'

Предыстория: Предполагается, что они будут захватывать отстраненных игроков с футбольного сайта. Я хотел бы сопоставить тех игроков (точнее, их идентификаторы, содержащиеся в URL), которые были фактически отправлены, но строка также содержит игроков, которые были фолированы.

Это дает мне список всех четырех идентификаторов игроков, содержащихся в mystring:

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

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

Это слишком терпимо, так как игроки 223 и 22046 не были отосланы. Два случая можно различить, используя закрывающую скобку. Однако я не могу указать правильный regex. В моем понимании это должно работать, но это приводит к пустому списку:

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

Желаемый результат: ['24285', '396']. У меня такое чувство, что я неправильно обрабатываю пробелы после .html. Как мне нужно указать регулярное выражение?

1 Ответ

1 голос
/ 23 апреля 2019

Я не уверен, почему вы используете регулярные выражения, чтобы найти числа в вашей структурированной информации. В любом случае, вы можете использовать это регулярное выражение:

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

Выход:

['24285', '396']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...