正则表达式匹配解析 HTML 节点失败

本文关键字:HTML 节点 失败 正则表达式 | 更新日期: 2023-09-27 18:08:51

我有一个字符串:

<graphic id="8374932">Translating Cowl (Inner/Outer Bondments</graphic>

还有我的模式:

"<graphic id='"(.*?)'">(.*?)</graphic>"

但第二组失败了,说:"不够(的。我应该如何预防它?

正则表达式匹配解析 HTML 节点失败

编辑:首先,如果你的目标是解析HTML或XML,我强烈建议不要这样做。如果你的目标是学习或手术抓取一个元素节点,那么正则表达式可能,我说可能是一个可以使用的工具。我回答这个问题的想法是你正在使用 html 模式来学习......

我相信您已经将数据与模式混淆了,并且正则表达式模式失败了。

我推荐这些东西

  1. 不要使用 .*? 来获取文本。对于正则表达式解析器来说,它太模糊了。在你的模式中更加简洁。
  2. 由于您知道文本括在引号或>xxx<中,因此请将它们用作锚点。>
  3. 确定锚点后,提取文本
  4. 将捕获的文本放入命名捕获组。

如何获取文本?告诉正则表达式解析器通过将 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 内容: 翻译整流罩(内/外束缚(