Что такое регулярное выражение для поиска строки между> и < - PullRequest
0 голосов
/ 22 января 2012

У меня есть HTML-файл

 ...<b>Breakfast</b><hr>...

Я хочу Breakfast, который находится между > и <.

Я пытался

...for test_string in line:
        if re.match(r'(>.*<$)',test_string):...

Это тоже не дало >Breakfast<.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 22 января 2012

В общем случае регулярное выражение не может разобрать html. Вместо этого вы можете использовать html-парсер:

from BeautifulSoup import BeautifulSoup # pip install BeautifulSoup

html = """...<b>Breakfast</b><hr>..."""

soup = BeautifulSoup(html)
print soup(text=True) # get all text
# -> [u'...', u'Breakfast', u'...']
print [b.text for b in soup('b')] # get all text for <b> tags
# -> [u'Breakfast']
3 голосов
/ 22 января 2012

$ означает «конец ввода» и не принадлежит этому регулярному выражению.

Вместо этого сделайте следующее:

m = re.search(r'>([^<]*)<', test_string)
if m:
    print m.group(1)

При этом выполняется поиск >, затем всех следующих символов, отличных от <, а затем <. Символы между > и < помечаются как группа, которую вы получаете, используя m.group(1)

0 голосов
/ 22 января 2012

Я думаю, что вы хотите:

r'(>.*?<)'

Или, может быть

r'<b(>.*?<)/b>'

, который не жадный и соответствует в середине строки. Обратите внимание, что синтаксический анализ HTML с регулярными выражениями не очень надежен.

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