Я пытаюсь разобрать html-страницу и извлечь 2 значения из строки таблицы. HTML для строки таблицы выглядит следующим образом: -
<tr>
<td title = "Associated temperature in (ºC)" class = "TABLEDATACELL" nowrap = "nowrap" align = "Left" colspan = "1" rowspan = "1">Max Temperature (ºC)</td>
<td class = "TABLEDATACELLNOTT" nowrap = "nowrap" align = "Center" colspan = "1" rowspan = "1">6</td>
<td class = "TABLEDATACELLNOTT" nowrap = "nowrap" align = "Center" colspan = "1" rowspan = "1"> 13:41:30</td>
</tr>
и выражение, которое у меня сейчас есть:
<tr>[\s]<td[^<]+?>Max Temperature[\w\s]*</td>[\s]
<td[^<]+?>(?<value>([\d]+))</td>[\s]
<td[^<]+?>(?<time>([\d\:]+))</td>[\s]</tr>
Однако, похоже, я не могу извлечь никаких совпадений. Может ли кто-нибудь указать мне в правильном направлении, спасибо.





Когда вы пишете <td[^<]+?>, я думаю, вы действительно имеете в виду <td[^>]*>
Это "открывающая скобка, тд, может быть что-то кроме скобки закрытие ..."
<tr>[\s]<td[^<]+?>Max Temperature[\w\s]*</td>[\s]
Еще не просмотрел все это, но это [^ <], вероятно, должно быть [^>], поскольку вы пытаетесь сопоставить все не-> до>, которое находится перед максимальной температурой.
Пытаться
<tr>\s*
<td[^>]*>.*?</td>\s*
<td[^>]*>\s*(?<value>\d+)\s*</td>\s*
<td[^>]*>\s*(?<time>\d{2}:\d{2}:\d{2})\s*</td>\s*
</tr>\s*
Знак "(ºC)" перед закрывающим td сравнивался с:
<tr>[\s]<td[^<]+?>Max Temperature[^<]*</td>[\s]
Это \ w граница слова? Я думаю, что здесь будет немного сложно, я бы использовал более общий подход.
А в третьей строке есть один пробел после тега td, это учтено?
<td[^<]+?>[\s]?(?<time>([\d\:]+))</td>[\s]</tr>
Известно, что надежный синтаксический анализ HTML с использованием регулярного выражения является чрезвычайно сложной задачей.
Думаю, я бы искал библиотеку синтаксического анализа HTML или библиотеку "очистки экрана";)
Если HTML поступает из ненадежного источника, вы должны быть особенно осторожны, чтобы правильно обрабатывать вредоносный синтаксис HTML. Плохая обработка HTML - главный источник атак на безопасность.
Я использую http://www.regexbuddy.com/ для таких элементов управления. До сих пор я тестировал предложение @ sgehrig правильно
Вместо этого используйте Пакет гибкости HTML или аналогичную библиотеку, как предлагает @Bjarke Ebert. Это подходящий инструмент для этой задачи.