2011-01-20 4 views
19

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

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

импорт повторно

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

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

+0

Я рекомендую [Rubular] (http://rubular.com/) для разработки регулярных выражений - это огромная экономия времени. Вот еще один вопрос, когда я помогал кому-то с похожим шаблоном: http://stackoverflow.com/questions/4716787/problem-with-ruby-regular-expression –

ответ

18

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

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 match open tags except XHTML self-contained tags, прежде чем идти дальше.

+4

+1 Анализ HTML с использованием регулярного выражения очень достоин трезвого совета. –

+0

Отлично. Спасибо за ваш ответ. Как заменить текст и записать файл? – jml

+1

Я должен упомянуть, что, хотя я читал этот пост, он также говорит, что вы можете использовать этот метод для ограниченного использования, и это то, что у меня есть. Я не хочу строить весь охватывающий парсер. – jml

Смежные вопросы