2014-02-02 3 views
1

Извините за запутанное название. Я пытаюсь выяснить простую проблему с Regex, но не могу понять, что такое решение.Регулярное выражение - сочетание «или» с «взглядом сзади»

У меня есть фрагмент HTML из более крупного документа HTML.

  • <td class="grade">100.0</td>

  • <td class="teacher">Mathias, Jordan</td>

Другое Regex отделяет два, давая им те-имена классов. Я использую положительный look-ahead для проверки . или , (период или запятая) и назначаю им класс класса или учителя (соответственно).

Проблема возникает позже, когда я хочу проверить, свободен ли код между этими тегами.

  • т.е.: <td class="grade"></td>

Я хотел бы использовать позитивный взгляд-позади, чтобы проверить, если класс либо класс или учитель (grade|teacher). Кроме того, я хотел бы проверить, что между >< (соединением пустых тегов) нет ничего.

Так далеко, это то, что у меня есть: (?<=.*(teacher|grade)*.+>?)[^.](?=</td>)

Примечание: Это в Python

+2

HTML-это ** не ** проблема с гвоздями, отложите этот повторитель-молоток. Возьмите вместо этого парсер HTML, например BeautifulSoup. –

+0

Обязательно, HTML лучше разбирается с парсером html, а не с регулярным выражением – mgilson

+0

Я использую Regex в сочетании с BeautifulSoup. Учитывая размер HTML и его сложность, BeautifulSoup бесполезен при рендеринге HTML, если Regex не изменяет класс, поэтому BeautifulSoup может разбираться и находить его. @MartijnPieters –

ответ

0

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

soup.find_all('td', text=re.compile(',')) 

находит все <td> элементы с direct текст в тег, содержащий запятую.

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