【问题标题】:Regex - Find the nth Occurrence - web view source data正则表达式 - 查找第 n 次出现 - Web 查看源数据
【发布时间】:2018-05-14 13:48:41
【问题描述】:

我有以下几点: (?<=>)(\w*)(?=<)

它会抓取两个尖括号 > 和 < 内出现的所有单词。

但是我只想抓住第三次出现。 我在上述正则表达式(作为第三个)中尝试了{2} 的几次迭代,但到目前为止没有任何效果。任何想法都会有所帮助。

【问题讨论】:

  • 使用正则表达式解析 HTML,he comes...
  • 任何想法都会有所帮助不要'尝试使用正则表达式解析 HTML,那样会导致疯狂。使用更像 HTML 敏捷包等的东西。
  • (?)(\w+)(?=
  • 嗨,利亚姆。不是不可能的,我以前做过很多次。感谢您的评论/建议现在让我们看看我是否能找到我所问的一个简单问题的答案。

标签: c# html .net regex


【解决方案1】:

如果您使用零宽度断言,例如向前看或向后看,那么您将永远不会跳过 n 个项目。您必须“吃掉”这些字符,以便处理过程中不会包含用于上一场比赛的字符。

下面的表达式应该可以解决问题。它匹配一个右括号的两个实例,而不是右括号,在它匹配第三个右括号之前,不是右括号,右括号。要获取括号内的内容,请使用Match.Groups 和GroupCollection.Captures。

var re = new Regex(@"(?:(?:>[^<]+<.*?){2}>)([^<]+)(?:)");
var matches = re.Matches(@"<a>1</a><b>2</b><a>3</a><b>4</b><e>5</e><a>6</a>");
foreach (Match match in matches) {
    Console.WriteLine(match.Groups[1].Captures[0]);
}
// output:
// 3
// 6

是的,这将是一个非常糟糕的 html 解析器,但对于快速而肮脏的 hack 来说很好。

【讨论】:

  • 谢谢丹尼尔,我正在研究你的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多