所以我搜索了所有的互联网,我找不到解决问题的方法。
我有一个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个结果。
答案 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
}
}