Поиск строк в тексте с использованием регулярных выражений с Python - PullRequest
0 голосов
/ 20 октября 2010

У меня есть текст, в котором были использованы только <b> и </b>. Например, <b>abcd efg-123</b>. Можно ли извлечь строку между этими тегами? также мне нужно извлечь 3 слова до и после этого фрагмента строки <b>abcd efg-123</b>. Как я могу это сделать? что было бы подходящим регулярным выражением для этого?

Ответы [ 4 ]

3 голосов
/ 20 октября 2010

получит то, что находится между тегами,

>>> s="1 2 3<b>abcd efg-123</b>one two three"
>>> for i in s.split("</b>"):
...   if "<b>" in i:
...      print i.split("<b>")[-1]
...
abcd efg-123
1 голос
/ 20 октября 2010

Обрабатывает теги внутри <b>, если они не являются <b> ofcouse.

import re    
sometext = 'blah blah 1 2 3<b>abcd efg-123</b>word word2 word3 blah blah'
result = re.findall(
      r'(((?:(?:^|\s)+\w+){3}\s*)'            # Match 3 words before
      r'<b>([^<]*|<[^/]|</[^b]|</b[^>])</b>'  # Match <b>...</b>
      r'(\s*(?:\w+(?:\s+|$)){3}))', sometext) # Match 3 words after

result == [(' 1 2 3<b>abcd efg-123</b>word word2 word3 ',
    ' 1 2 3',
    'abcd efg-123',
    'word word2 word3 ')]

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

1 голос
/ 20 октября 2010

Это на самом деле очень тупая версия и не допускает вложенные теги.

re.search(r"(\w+)\s+(\w+)\s+(\w+)\s+<b>([^<]+)</b>\s+(\w+)\s+(\w+)\s+(\w+)", text)

См. Документацию по Python .

0 голосов
/ 20 октября 2010

Вы не должны использовать регулярные выражения для разбора HTML. Так лежит безумие.

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

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