Подтвердить что ты не робот

Как проверить соответствие регулярных выражений

У меня есть строка. Позвольте называть это 'test'. Я хочу проверить соответствие для этой строки, но только с использованием backref регулярного выражения.

Могу ли я сделать что-то вроде этого:

import re

for line in f.readlines():
   if '<a href' in line:
      if re.match('<a href="(.*)">', line) == 'test':
         print 'matched!'

? Это, конечно, похоже, не работает, но я думаю, что я могу быть близким? В основном вопрос заключается в том, как я могу получить re для возврата только backref для сравнения?

4b9b3361

Ответ 1

re.match соответствует только начало строки.

def url_match(line, url):
    match = re.match(r'<a href="(?P<url>[^"]*?)"', line)
    return match and match.groupdict()['url'] == url:

пример использования:

>>> url_match('<a href="test">', 'test')
True
>>> url_match('<a href="test">', 'te')
False
>>> url_match('this is a <a href="test">', 'test')
False

Если шаблон может встречаться где угодно в строке, используйте re.search.

def url_search(line, url):
    match = re.search(r'<a href="(?P<url>[^"]*?)"', line)
    return match and match.groupdict()['url'] == url:

пример использования:

>>> url_search('<a href="test">', 'test')
True
>>> url_search('<a href="test">', 'te')
False
>>> url_search('this is a <a href="test">', 'test')
True

N.B: Если вы пытаетесь проанализировать HTML с помощью регулярного выражения, прочитайте RegEx, чтобы открывать теги, за исключением тегов XHTML, которые находятся в автономном режиме, прежде чем идти дальше.