正则表达式匹配解析 HTML 节点失败
本文关键字:HTML 节点 失败 正则表达式 | 更新日期: 2023-09-27 18:08:51
我有一个字符串:
<graphic id="8374932">Translating Cowl (Inner/Outer Bondments</graphic>
还有我的模式:
"<graphic id='"(.*?)'">(.*?)</graphic>"
但第二组失败了,说:"不够(的。我应该如何预防它?
编辑:首先,如果你的目标是解析HTML或XML,我强烈建议不要这样做。如果你的目标是学习或手术抓取一个元素节点,那么正则表达式可能,我说可能是一个可以使用的工具。我回答这个问题的想法是你正在使用 html 模式来学习......
我相信您已经将数据与模式混淆了,并且正则表达式模式失败了。
我推荐这些东西
- 不要使用 .*? 来获取文本。对于正则表达式解析器来说,它太模糊了。在你的模式中更加简洁。
- 由于您知道文本括在引号或>xxx<中,因此请将它们用作锚点。>
- 确定锚点后,提取文本
- 将捕获的文本放入命名捕获组。
如何获取文本?告诉正则表达式解析器通过将 set 操作与 set 一起使用^
来获取任何不是锚字符的东西(这意味着不在集合[ ]
中时(,例如 ([^'"]+)
表示匹配所有不是引号的内容。
将您的模式更改为此模式,以演示上述建议:
string data = @"<graphic id=""8374932"">Translating Cowl (Inner/Outer Bondments</graphic>";
// 'x22 is the hex escape for the quote, makes it easier to read.
string pattern = @"
(?:graphic's+id='x22) # Match but don't capture (MBDC) the beginning of the element
(?<ID>[^'x22]+) # Get all that is not a quote
(?:'x22>) # MBDC the quote
(?<Content>[^<+]+) # Place into the Content match capture group all text that is not + or <
(?:'</graphic) # MBDC The graphic";
// Ignore Pattern whitespace only allows us to comment, does not influence regex processing.
var mt = Regex.Match(data, pattern, RegexOptions.IgnorePatternWhitespace);
Console.WriteLine ("ID: {0} Content: {1}", mt.Groups["ID"], mt.Groups["Content"]);
//输出:
ID: 8374932 内容: 翻译整流罩(内/外束缚(