0

我有那个文字:

<a href="/extend/themes/bizway">BizWay</a>

我想使用正则表达式来获取仅从 a 标签的内部文本中提取的 BizWay 词。顺便说一下,这是一个示例标签,BizWay 可以是任何单词

所以让我们说我想要一个像这样的正则表达式:

<a href=" + '"' + "/extend/themes/WORD" + '"' + ">WORD</a>

其中字 = 字

编辑 :

我尝试了以下 REGEX 模式:

@"<a href=" + '"' + "/extend/themes/.*" + '"' + @">.*</a>"

但它给了我整条线。

我真的很感谢你的帮助。

4

4 回答 4

4

我建议使用 C# 的 HTML 解析器库而不是使用正则表达式(这里有一个关于它的长论点,来自 stackoverflow RegEx match open tags except XHTML self-contained tags)。

通过快速搜索,HTMLAgilityPack 似乎是 C# 的一个不错的选择。这篇 stackoverflow 帖子将有助于在您的 C# 项目中进行此设置。如何使用 HTML 敏捷包

于 2012-06-20T17:03:48.653 回答
2

我完全同意loeschg。我犯了忽略这个建议并使用正则表达式的错误。在调整我的代码大约一个月后,我最终使用了 HtmlAgilityPack。使用正则表达式解析 Html 并不像您期望的那样简单,变量太多。

这是您的起点...

string rawHtml = "<a href=\"/extend/themes/bizway\">BizWay</a>"

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(rawHtml);
HtmlNodeCollection linkNodes = doc.DocumentNode.SelectNodes("//a/@href");
foreach (var node in linkNodes)
{
    string word = node.InnerText;
}

要检查 href 的值,您可以这样做...

if (node.Attributes["href"].Value.Contains("extend/themes"))
于 2012-06-20T17:39:40.020 回答
0

我怀疑问题不是正则表达式本身,而是你对它会做什么的期望。根据我的经验,正则表达式系统返回与指定的完整模式匹配的文本。您的期望是它只会返回与通配符匹配的部分。不幸的是,这不是正则表达式的工作方式。您仍然需要为您感兴趣的行的位解析正则表达式的结果。

对于解析 HTML,正如 loeschg 所提到的,最好使用 HTML 解析库。

于 2012-06-20T17:39:21.407 回答
0

如果您只想要线路的一部分,您将需要使用一个组。为此,您可以将稍后要检索的部分用括号括起来,并可以选择使用以下名称对其进行命名:

?<name>

所以:

Match m = Regex.Match(@"<a href='/extend/themes/bizway'>BizWay</a>", 
                      @"<a href='/extend/themes/(?<word1>.+)'>(?<word2>.+)</a>");
Console.WriteLine(m.Groups["word1"] + " " + m.Groups["word2"]);

将打印“bizway BizWay”。

于 2012-06-20T17:45:05.070 回答