日期:2014-05-19  浏览次数:20976 次

求助:正则表达式
现有以下2种tr:
1.
<tr   xxx>
<td   xxx> (需要的内容) </td>
<td   xxx> (需要的内容) </td>
<td   xxx> (需要的内容) </td>
...(共i个td,i为固定值)
</tr>
2.
<tr   xxx>
<td   xxx> (需要的内容) </td>
...前面共l个简单td,l固定
<td   xxx>
<table>
<tr>
<td   xxx> (需要的内容) </td>
</tr>
</table>
</td>
<td   xxx> (需要的内容) </td>
...再m个简单td
<td   xxx>
<table>
<tr>
<td   xxx> (需要的内容) </td>
</tr>
</table>
</td>
<td   xxx> (需要的内容) </td>
...n个简单td
</tr>
l+m+n+2=i
也就是说在同样i个td中,固定的2个位置各有一个包含table的td,table中都只有1个tr和1个td

在同一个table中以上2种tr以随机的数量和顺序夹杂
请问我想取得其中所需部分该如何写正则表达式?

现在利用
<tr[^> ]*> ((?:.*?(?= <table| </tr> )(?( <table) <table[^> ]*> .*? </table> .*?|))*?) </tr>
可以取得一个tr之间的所有内容,但是要获取其中各td里的内容还需要再用一次正则,比较麻烦,有没有办法直接取得一个tr中的所有所需内容

谢谢!

------解决方案--------------------
没太明白你的意思,看看这是不是你想要的结果吧

string yourStr = .........;
MatchCollection mc = Regex.Matches(yourStr, @ " <td[^> ]*> (? <content> [^ <> ]*) </td> ", RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups[ "content "].Value + "\n ";
}