我一直试图这样做一段时间,但我的正则表达能力非常糟糕。 我有这个文字
<td class="red">
One
</td>
<td>
Two
</td>
我希望得到“两个”的价值。我尝试了多种方法,比如
<td>\n(.*)\n</td>
<td class=\"red\">\nOne\n</td>\n<td>\n(.*)\n</td>
这是我的C#源
foreach (Match m in Regex.Matches(src, pattern, RegexOptions.IgnorePatternWhitespace))
{
MessageBox.Show(m.Groups[1].Value);
}
我尝试更改RegexOptions
但没有运气。如果有人能帮助我,我将不胜感激。
谢谢
答案 0 :(得分:1)
为什么不简单:
string expression = @"\<td\>[\s]*[A-Za-z]*[\s]*\</td\>";
如果你想为你的小组命名
string expression = @"\<td\>[\s]*(?<groupName>([A-Za-z]*))[\s]*\</td\>";
答案 1 :(得分:0)
使用s
( DotAll )修饰符强制点.
也匹配换行序列。
foreach (Match m in Regex.Matches(src, @"(?s)<td>\s*(.*?)\s*</td>"))
MessageBox.Show(m.Groups[1].Value);
注意:点击.*
与?
进行非贪心匹配。
答案 2 :(得分:0)
启用dotall(s
)修饰符,使.
与换行符匹配。
(?<=<td>)\s*(\w*)\s*(?=<\/td>)
你的代码就是,
Regex rgx = new Regex(@"(?s)(?<=<td>)\s*(\w*)\s*(?=<\/td>)");
foreach (Match m in rgx.Matches(input))
Console.WriteLine(m.Groups[1].Value);