从HTML注释中提取变量和值

时间:2012-05-11 13:39:41

标签: c# asp.net html regex string

我正在尝试从HTML评论中提取变量...有关如何做到这一点的任何想法?

评论示例......

<!-- variable1: "wer2345235" variable2: "sdfgh333" variable3: "sdfsdfdfsdf"  -->

我尝试基于空格进行拆分,但变量值可能有空格。

感谢您的帮助!

[编辑] HTML标记内的变量是API调用的结果 - 因此它超出了我的控制范围。 [/编辑]

[编辑2] 这可以使用正则表达式完成吗?我一直在阅读,我可以匹配,但没有多少其他! [/编辑]

3 个答案:

答案 0 :(得分:2)

您可以使用HTML解析器来获取评论,即HtmlAgilityPack

您可以参考此Grabbing meta-tags and comments using HTML Agility Pack

[编辑] 假设您收到了注释并且格式已知,则可以删除

我这样做了,它变量字段正确

        var str = "variable1: \"wer2345235\" variable2: \"sdfgh333\" variable3: \"sdfsdfdfsdf\"";
        var r = new Regex(@"variable[\d]+: ");
        var result = r.Split(str);
        foreach( var match in result)
        {
            Console.WriteLine(match);
        }

        Console.ReadLine();

答案 1 :(得分:0)

我猜你要通过服务器端代码访问,因为你应用了C#标签。是否有理由为这些变量选择评论?

您可以使用<asp:HiddenField />并使用Value属性。访问这些值并进行适当的解析将是微不足道的。

如果您在评论中绝对需要这些内容。评论是否包含在带有ID标记的其他块中?如果是这样,您可以获取该对象的InnerHTML并使用基本的String函数来获取和解析字段。这假设当然没有多个评论或没有明确的方法来定位这个特定的评论。

答案 2 :(得分:0)

简单的正则表达式应该没问题。

    private Dictionary<string,string> ParseCommentVariables(string contents)
    {
        Dictionary<string,string> variables = new Dictionary<string,string>();

        Regex commentParser = new Regex(@"<!--.+?-->", RegexOptions.Compiled);
        Regex variableParser = new Regex(@"\b(?<name>[^:]+):\s*""(?<value>[^""]+)""", RegexOptions.Compiled);
        var comments = commentParser.Matches(contents);
        foreach (Match comment in comments)
            foreach (Match variable in variableParser.Matches(comment.Value))
                if (!variables.ContainsKey(variable.Groups["name"].Value))
                    variables.Add(variable.Groups["name"].Value, variable.Groups["value"].Value);
        return variables;
    }

首先从'contents'字符串中提取所有注释。然后它将提取它找到的所有变量。它将它们存储在字典中并将其返回给调用者。

即:

string contents = "some other HTML, lalalala <!-- variable1: \"wer2345235\" variable2: \"sdfgh333\" variable3: \"sdfsdfdfsdf\"  --> foobarfoobarfoobar";
var variables = ParseCommentVariables(contents);
string variable1 = variables["variable1"];
string variable2 = variables["variable2"];