我正在尝试从HTML评论中提取变量...有关如何做到这一点的任何想法?
评论示例......
<!-- variable1: "wer2345235" variable2: "sdfgh333" variable3: "sdfsdfdfsdf" -->
我尝试基于空格进行拆分,但变量值可能有空格。
感谢您的帮助!
[编辑] HTML标记内的变量是API调用的结果 - 因此它超出了我的控制范围。 [/编辑]
[编辑2] 这可以使用正则表达式完成吗?我一直在阅读,我可以匹配,但没有多少其他! [/编辑]
答案 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"];