帮助使用正则表达式模式从C#中的html中提取一些文本

时间:2011-04-30 08:53:12

标签: regex

我有这个html块:

<tr>
<th colspan="2" valign="middle">some text</th>
</tr>
<tr>
<td class="row1">lalala<span>dadada</span></td>
<td class="row2"><input name="unwantedinput"></td>
</tr>

<th colspan="2" valign="middle">some text</th>
</tr>
<tr>
<td class="row1">nanana<span>bababa</span></td>
<td class="row2"><input name="unwantedinput"></td>
</tr>


<tr>
<th colspan="2" valign="middle">Some other text</th>
</tr>
<tr>
<td class="row1">(this text needs to be extracted)</td>
<td class="row2"><input name="myUniqueInput"></td>
</tr>

<tr>
<th colspan="2" valign="middle">some text</th>
</tr>
<tr>
<td class="row1">lalala<span>dadada</span></td>
<td class="row2"><input name="unwantedinput"></td>
</tr>

我需要的是只提取“(这个文本需要提取)”之间的数据。这是我到目前为止所做的:

<th[^>]*>(.*?)<input[^>]*name="myUniqueInput"[^>]*>

这种模式的问题。它从一开始就匹配整个文本直到“myUniqueInput”.. 任何想法如何解决这个问题? 提前谢谢..

2 个答案:

答案 0 :(得分:1)

/<td[^>]*>([^<]*)<[^>]*>\s*<td[^>]*>\s*<input[^>]*name="myUniqueInput"/

如果您知道html的外观,您可以随时匹配更多/更少。想法是在输入名称之前跳过td *。然后获取前一个td / td之间的所有内容。

答案 1 :(得分:0)

普遍认为正则表达式的表达力不足以正确解析HTML。您是否考虑过使用库来解析HTML,然后从那里提取数据?