【问题标题】:How to extract the value of a regex backreference?如何提取正则表达式反向引用的值?
【发布时间】:2012-11-18 00:16:53
【问题描述】:

所以我多年来一直在使用正则表达式,主要是在 PHP 环境中,但我正在开发一个使用 VB .NET 脚本引擎的小项目(我有 VB 经验,但仅此而已),并且有一些做一些非常基本的事情的真正问题。

我有一个加载了 HTML 文件内容的变量,我想提取某个标签的值。

例子:

<span id="temp" class="up"><span class="up">76.4</span></span>

在研究了基于 .NET 的正则表达式的变化后,这是我想出的(反向引用 1 允许我捕获该数字):

<span id="temp" class="(?:up|down)"><span class="(?:|up|down)">([0-9]+\.[0-9]{1})</span> 

但是,我无法让它工作。 RegEx Hero 网站似乎验证了正则表达式,所以我猜问题出在我的代码上。我在网上关注了很多例子,但总是遇到某种错误。更糟糕的是,我正在使用记事本开发这个脚本:p

有人可以提供一个提取该数字的有效 VB .NET 脚本示例吗?目标是仅用数字替换该 HTML 变量中的所有文本。

【问题讨论】:

  • 你的正则表达式很好,所以你可能是对的,它是你的代码。发布您尝试过的内容。

标签: .net html regex vb.net


【解决方案1】:

您的表达似乎是有效的。我唯一要添加的是数字的命名组。试试这个:

Dim input = "<span id=""temp"" class=""up""><span class=""up"">76.4</span></span>"
Dim regex = New Regex("<span id=""temp"" class=""(?:up|down)""><span class=""(?:|up|down)"">(?<number>[0-9]+\.[0-9]{1})</span>")
Dim number = regex.Match(input).Groups("number").Value

它应该让你76.4

还有一件事——解析 HTML 时总是更好to use HTML parser instead of regexes。我建议HtmlAgilityPack

【讨论】:

  • 谢谢,问题出在我的代码上,我猜我看了太多的例子,最后得到了科学怪人的代码。您的示例很简单,有助于解释如何访问这些数据。我会投票给你,但还没有足够的代表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
相关资源
最近更新 更多