Получите ссылки с одним переносом, за которым следуют 4 цифры в регулярном выражении - PullRequest
0 голосов
/ 13 мая 2018

Я собираюсь извлечь ссылки типа http://www.realclearpolitics.com/epolls/2010/governor/ks/kansas_governor_brownback_vs_holland-1235.html

Ссылки должны заканчиваться дефисом, 4 цифрами и расширением html

Это мой исходный код

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"http://www\.realclearpolitics\.com/epolls/\d{4}/governor/.+?\-\d{4}\.html"

test_str = "value=\"http://www.realclearpolitics.com/epolls/2010/house/wv/west_virginia_3rd_district_maynard_vs_rahall-1385.html\">West Virginia 3rd District</option> </select></p></div></div><div id=\"leftbox-latest\"><span class=\"sidebar-header\">2010 Governor Races</span><div id=\"poll_sidebar\"><p><strong><img src=\"http://assets.realclearpolitics.com/images/arrow_black.gif\" border=\"0\" alt=\"\" width=\"7\" height=\"10\" /><a href=\"http://www.realclearpolitics.com/epolls/2010/governor/2010_elections_governor_map.html\">RealClearPolitics Ratings</a></strong><br /> <strong><img src=\"http://assets.realclearpolitics.com/images/arrow_black.gif\" border=\"0\" alt=\"\" width=\"7\" height=\"10\" /><a href=\"http://www.realclearpolitics.com/epolls/2010/governor/2010_elections_governor_map_race_changes.html\">RCP Race-by-Race Changes</a></strong><br /> <strong><img src=\"http://assets.realclearpolitics.com/images/arrow_black.gif\" border=\"0\" alt=\"\" width=\"7\" height=\"10\" /><a href=\"http://www.realclearpolitics.com/epolls/2010/governor/2010_elections_governor_map_final_results.html\">Final Governors Map</a></strong><br /> <select class=\"search_by_race\" name=\"search_by_race\"> <option value=\"#\">Governor Races</option> <option value=\"http://www.realclearpolitics.com/epolls/2010/governor/al/alabama_governor_bentley_vs_sparks-1586.html\">Alabama Governor</option> <option value=\"http://www.realclearpolitics.com/epolls/2010/governor/ak/alaska_governor_parnell_vs_berkowitz-1510.html\">Alaska Governor</option> <option value=\"http://www.realclearpolitics.com/epolls/2010/governor/az/arizona_governor_brewer_vs_goddard-1409.html\">Arizona Governor</option> <option value=\"http://www.realclearpolitics.com/epolls/2010/governor/ar/arkansas_governor_keet_vs_beebe-1568.html\">Arkansas Governor</option> <option value=\"http://www.realclearpolitics.com/epolls/2010/governor/ca/california_governor_whitman_vs_brown-1113.html\">California Governor</option> <option value=\"http://www.realclearpolitics.com/epolls/2010/governor/co/colorado_governor_maes_vs_hickenlooper_vs_tancredo-1677.html\">Colorado Governor</option> <option "

matches = re.finditer(regex, test_str, re.MULTILINE)

for matchNum, match in enumerate(matches):
    matchNum = matchNum + 1

    print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))

    for groupNum in range(0, len(match.groups())):
        groupNum = groupNum + 1

        print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.

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

1 Ответ

0 голосов
/ 13 мая 2018

В своем регулярном выражении вы использовали ., который может соответствовать любому символу. Вам нужно ограничить эту часть с помощью [^"\s], чтобы соответствовать любому символу, кроме " или пробела.

Я предлагаю вам использовать

regex = r'http://www\.realclearpolitics\.com/epolls/\d{4}/governor/[^\s"]+-\d{4}\.html'

См. Демоверсию Python

Детали

  • http://www\.realclearpolitics\.com/epolls/ - буквальная http://www.realclearpolitics.com/epolls/ подстрока
  • \d{4} - 4 цифры
  • /governor/ - буквальная подстрока
  • [^\s"]+ - 1+ символов кроме пробелов и "
  • - - дефис
  • \d{4} - 4 цифры
  • \.html - подстрока .html.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...