C#字符在正则表达式中转义

时间:2013-06-06 07:07:13

标签: c# regex escaping

我使用此正则表达式来匹配包含href

中特定单词的超链接
<a( .*?)? href=\".*?" + word + ".*?\"( .*?)?>.*?</a>

这将返回匹配链接的第一个外观

现在我需要查找具有相同匹配项的所有超链接,我已经尝试过这个正则表达式:

/<a [^>]*\bhref\s*=\s*"[^"]*word.*?<\/a>/

我在使编译器接受此表达式时遇到一些问题。问题似乎是逃避一些特殊的角色。看来这部分是一个问题

"[^"]

我试图逃避[带\,并将@放在双引号前,但没有运气。

错误显示“错误的编译常量值”。

有谁知道如何格式化这个正则表达式以满足编译器的需要?

2 个答案:

答案 0 :(得分:2)

正则表达式不是解析HTML文件的好方法..

您应该使用htmlagilitypack

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("http://yourWebSite.com");

List<String> hrefLst=doc.DocumentNode
                        .SelectNodes("//a[@href]")
                        .Select(x=>x.Attributes["href"].Value)
                        .Where(y=>y.Contains(word))
                        .ToList();

hrefLst现在拥有您所需的所有链接。

不是那么简单!

答案 1 :(得分:1)

虽然您可以转义需要在字符串中转义的所有内容,但是当字符串为@ -quoted时,正则表达式更容易阅读。您需要担心的唯一问题是双引号,需要加倍。

string expression = @"/<a [^>]*\bhref\s*=\s*""[^""]*word.*?<\/a>/";

注意:正如评论所说,这个正则表达式可能会失败。我没有测试过它,我只是对它进行了修改以使其编译。