无法为这个简单的html获得正确的正则表达式

时间:2010-12-19 20:01:18

标签: regex

<tr bgcolor='#C0C0C0'>
   <td>ID</td><td>personName</td>
   <td>homePhone<br>officePhone</td>
   <td>city</td>
   <td>street</td>
</tr>

好的,所以这是我作为webresponse得到的一段HTML,我需要用grup解析它以提取ID,personName,city,homePhone,officePhone和street。

有人可以给我一个REGEX模式吗?我已经尝试了几个小时,我无法看到我错在哪里。无论如何,有任何好的工具来创建正则表达式,一次又一次地运行应用程序是一个痛苦。感谢。

1 个答案:

答案 0 :(得分:0)

(假设.NET ......)

这应该这样做:

(?s:<tr.*?>(?:.*?<td.*?>(?<content>.*?)</td>)*)

提取这些值:

  • ID
  • personName
  • homePhone<br>officePhone
  • city
  • street

它将返回一个匹配,一个组,多个捕获。

例如,此代码会将每个值写入控制台。

var input = "<tr bgcolor='#C0C0C0'><td>ID</td>\n<td>personName</td>\n<td>homePhone\n<br>officePhone</td>\n<td>city</td>\n<td>street</td></tr>";
var pattern = "(?s:<tr.*?>(?:.*?<td.*?>(?<content>.*?)</td>)*)";

var match = Regex.Match(input, pattern);

foreach (var capture in match.Groups["content"].Captures)
    Console.WriteLine(capture.Value);

它适用于任意数量的单元格。它忽略了单元格之间的文本,新行和空格。它会忽略行或单元格上的任何属性。

我使用此工具处理正则表达式:http://www.radsoftware.com.au/regexdesigner/