C#使用正则表达式提取字符串

时间:2013-08-26 16:55:02

标签: c#

我有一个html字符串,我正在解析,如下所示。我需要获得@Footer的值。

strHTML = "<html><html>\r\n\r\n<head>\r\n<meta http-equiv=Content-Type 
           content=\"text/html; charset=windows-1252\">\r\n
           <meta name=Generator content=\"Microsoft Word 14></head></head><body> 
           <p>@Footer=CONFIDENTIAL<p></body></html>"

我已尝试过以下代码,我如何获得该值?

Regex m = new Regex("@Footer", RegexOptions.Compiled);
foreach (Match VariableMatch in m.Matches(strHTML.ToString()))
{
     Console.WriteLine(VariableMatch);
}

5 个答案:

答案 0 :(得分:2)

您需要在=之后捕获值。只要该值不能包含任何<字符,这将有效:

Regex m = new Regex("@Footer=([^<]+)", RegexOptions.Compiled);
foreach (Match VariableMatch in m.Matches(strHTML.ToString()))
{
    Console.WriteLine(VariableMatch.Groups[1].Value);
}

答案 1 :(得分:2)

您可以使用正则表达式执行此操作,但这不是必需的。一个简单的方法是:

var match = strHTML.Split(new string[] { "@Footer=" }, StringSplitOptions.None).Last();
match = match.Substring(0, match.IndexOf("<"));

这假设您的html字符串只有一个@Footer

答案 2 :(得分:1)

你的正则表达式将匹配字符串“@Footer”。匹配的值为“@Footer”。

你的正则表达式应该是这样的:

Regex regex = new Regex("@Footer=[\w]+");
string value = match.Value.Split('=')[1];

答案 3 :(得分:1)

使用匹配的组。

Regex.Matches(strHTML, @"@Footer=(?<VAL>([^<\n\r]+))").Groups["VAL"].Value;

答案 4 :(得分:0)

如果这是你的所有字符串,我们可以使用字符串方法解决它而不涉及正则表达式的东西:

var result = strHTML.Split(new string[]{"@Footer=", "<p>"}, StringSplitOptions.RemoveEmptyEntries)[1]