正则表达式匹配,给出1个结果

时间:2013-11-21 20:10:43

标签: c# regex

所以我搜索了所有的互联网,我找不到解决问题的方法。

我有一个HTML表格

<tr>something</tr>
<tr class="even detailed">Something</tr>
<tr class="odd detailed">something</tr>
// and so on

现在我将把tr的所有内容用于偶数或奇数类。但我只得到1个结果。我的C#代码是:

pattern = @"<tr class=""(even|odd) detailed"">(.*)</tr>";
var matches = Regex.Matches(Contents, pattern, RegexOptions.Singleline);

我尝试了很多东西,但似乎没有用。有了这个我只得到1个结果。

3 个答案:

答案 0 :(得分:1)

考虑以下Regex ......

(?<=\<tr.*?(even|odd).*?\>).*?(?=\<)

祝你好运!

答案 1 :(得分:0)

默认情况下,正则表达式遵循“最左边最长”的规则,也就是说,它们是贪婪的并且会找到最左边,最长的匹配。您的.*规则happilay(ecstacticly,even)会消耗所有</tr>元素保存最后一个,以及所有<tr>元素保存第一个,只留下一个匹配。

此外,正如@TimS所指出的,HTML在“正则表达式”意义上并不是一种“常规”语言。

答案 2 :(得分:0)

使用html解析器是更好的解决方案。但如果你真的想使用正则表达式,这是一个解决方案

正则表达式:

<tr\s+class="(even|odd)\s+detailed">(.*?)</tr>

代码

string strRegex = @"<tr\s+class="(even|odd)\s+detailed">(.*?)</tr>";
RegexOptions myRegexOptions = RegexOptions.None;
Regex myRegex = new Regex(strRegex, myRegexOptions);
string strTargetString = @"<tr>something</tr>" + "\n" + @"<tr class=""even detailed"">Something</tr>" + "\n" + @"<tr class=""odd detailed"">something</tr>" + "\n" + @"// and so on";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    // Add your code here
  }
}