Как я могу очистить / проанализировать эти данные с помощью регулярных выражений? - PullRequest
0 голосов
/ 30 ноября 2010

Я действительно начинающий, когда дело доходит до регулярных выражений, и я не совсем уверен, с чего начать.У меня есть некоторый HTML-код, соскобленный с веб-страницы и сохраненный в переменной, и он выглядит примерно так:

<thead><tr>
<th></th>
<th>GENERAL INFORMATION</th>
<th></th>
<th>DETAILED DATA</th>
</tr></thead>
<tbody><tr>
<th>ID</th>
<td>123456789ABCD</td>
<th>Field1</th>
<td>6 = (Some-Specification (3 or more details))</td>

</tr></tbody>
<tbody><tr>
<th>AGL</th>
<td>1 - United States ; TH - Some Data</td>
<th>Field2</th>
<td>7 = (Option/Other Option)</td>
</tr></tbody>
<tbody><tr>
<th>MANUFACTURER</th>
<td>2010 SPECIFICATION  (ADSD: HMKC)</td>
<th>Field3</th>

<td>8 = (My Type)</td>
</tr></tbody>
<tbody><tr>
<th>MODEL</th>
<td>6X4 MY-MODEL/SOME_SPECS LONG SPECIFICATION, BLAH</td>
<th>Field4</th>
<td>9 = (STUFF/OTHER STUFF)</td>
</tr></tbody>
<tbody>

А еще есть то же самое ... Я хотел бы проанализировать данныеиз этих клеток в переменные.(например, разобрать "123456789ABCD" в переменную ID) Я работаю в ColdFusion и думал об использовании таких методов, как REFindNoCase, REReplaceNoCase, SpanExcluding ... Есть идеи, как мне это сделать?Или, если вы не знакомы с ColdFusion, даже обычные выражения, необходимые для анализа этих данных, были бы очень полезны.

Ответы [ 3 ]

7 голосов
/ 30 ноября 2010

Не используйте Regex для HTML.Это уничтожит вас.

Если вы делаете это много, вы должны получить инструмент HTML, такой как TagSoup , который нормализует HTML.Если вы работаете с веб-страницами с одного сайта, вы можете создать таблицу стилей XSLT (или инструмент DOM с использованием XPath), который извлечет нужные ячейки.

Xpath для вашей ячейки (я пропустил HTMLnamespace) может быть

//tbody/tr[1]/td[1]

, или вы можете захотеть найти строки по ID

//tbody/tr[th='ID']]/td

[HTML выглядит довольно грязно - он использует th и td в одном и том жеtr что не идиоматично.]

1 голос
/ 30 ноября 2010

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

Это регулярное выражение должно делать то, что вам нужно:

<th>((?!</th>).)*</th>\s*<td>((?!</td>).)*</td>

Использовать группу захвата 1 для ключа и группу 2 для значения.

Я не знаю ColdFusion, поэтому яне могу сказать вам, как его применить.

1 голос
/ 30 ноября 2010

Используйте синтаксический анализатор CF xml, XmlParse .Похоже, он основан на строгом XML, поэтому убедитесь, что вы вводите что-то вроде htmltidy.

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