C#中的简单正则表达式模式

时间:2014-06-25 13:20:54

标签: c# regex

我一直试图这样做一段时间,但我的正则表达能力非常糟糕。 我有这个文字

<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但没有运气。如果有人能帮助我,我将不胜感激。 谢谢

3 个答案:

答案 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>)

DEMO

你的代码就是,

Regex rgx = new Regex(@"(?s)(?<=<td>)\s*(\w*)\s*(?=<\/td>)");
foreach (Match m in rgx.Matches(input))
Console.WriteLine(m.Groups[1].Value);