使用正则表达式查找两个输入字符串之间的内容?

时间:2015-06-26 19:37:16

标签: c# regex

我正在开发一个简单的facebook messenger客户端(不需要开发者帐户),到目前为止,我所取得的成就是获取所有消息 - 名称,预览,时间。我想要找到的是用户href链接

到目前为止,我有这个:

            MatchCollection name = Regex.Matches(
            htmlText, "<div class=\"_l2\">(.*?)</div>");

        MatchCollection preview = Regex.Matches(
            htmlText, "<div class=\"_l3 fsm fwn fcg\">(.*?)</div>");

        MatchCollection time = Regex.Matches(
            htmlText, "<div class=\"_l4\">(.*?)</div>");

完全有效。

但是我尝试了一些我在这个网站上找到的东西,但似乎没什么用。 href类似于:<a class="_k_ hoverZoomLink" rel="ignore" href="

以&#34;结束。有人可以推荐我一篇文章,它实际上可以帮助我知道如何获得这个href。或者甚至比正则表达式更好的方法,但我真的更喜欢正则表达式:

for (int i = 0; i < name.Count; i++)
        {
            String resultName = Regex.Replace(name[i].Value, @"<[^>]*>", String.Empty);
            String newName = resultName.Substring(0, resultName.Length - 5);
            String resultPreview = Regex.Replace(preview[i].Value, @"<[^>]*>", String.Empty);
            String s = time[i].Value;
            int start = s.IndexOf("data-utime=\"") + 28;
            int end = s.IndexOf("</abbr>", start);
            String newTime = s.Substring(start, (end - start));
            threads.Add(new Thread(newName, resultPreview, newTime, ""));
        }

先谢谢。

1 个答案:

答案 0 :(得分:0)

使用像HtmlAgilityPack

这样的真实html解析器
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(htmlstring);
var link = doc.DocumentNode.SelectSingleNode("//a[@class='_k_ hoverZoomLink']")
              .Attributes["href"].Value;

您也可以使用Linq而不是XPath

var link = doc.DocumentNode.Descendants("a")
               .Where(a => a.Attributes["class"] != null)
               .First(a => a.Attributes["class"].Value == "_k_ hoverZoomLink")
               .Attributes["href"].Value;