REGEX HREF信息和匹配计数

时间:2017-09-27 08:10:30

标签: c# html regex

我正在尝试确定C#脚本中$属性的数量。 下面是我从StreamReader返回并传递给var(href

的HTML
responsefromserver

我想要做的是获得一个匹配(使用正则表达式),这样我就可以计算URL中<html> <head><title>Index of /file-download/isin/20170917/</title></head> <body bgcolor="white"> <h1>Index of /file-download/isin/20170917/</h1><hr><pre><a href="../">../</a> <a href="Commodities/">Commodities/</a> 18-Sep-2017 00:05 - <a href="Credit/">Credit/</a> 18-Sep-2017 00:05 - <a href="Equity/">Equity/</a> 18-Sep-2017 00:05 - <a href="Foreign_Exchange/">Foreign_Exchange/</a> 18-Sep-2017 00:05 - <a href="Rates/">Rates/</a> 18-Sep-2017 00:05 - </pre><hr></body> </html> 的数量(这些数量可以从1到5个不等(商品,信用,权益,FX&amp; amp; ;率)然后我可以将计数传递给变量以便稍后使用。

href名称永远不会更改,但我需要确认计数,以便我可以检查下载的文件数是否与href的计数相符(每个href都有在它下面的文件)。

我的正则表达能力是垃圾,而且我永远无法在条款(商品,信用,股票,外汇和利率)上匹配,所以任何帮助构建该字符串都会很棒。

任何指导都很棒,我不是一个大C#用户,我在SSIS包中使用它,我使用HTMLAgilityPack,所以如果有另一种方式比我更清洁/更好愿意接受建议。任何代码片段,我可以使用,给我我需要的东西,使用XPath将是方便的,因为我不是一个普通的c#用户(还)

非常感谢提前。

2 个答案:

答案 0 :(得分:0)

首先,您必须声明要匹配的字符串

string[] toMatch = {"Rates","Foreign_Exchange","Equity","Credit","Commodities"};

带有href属性的链接的Xpath是"//a[@href]" 要知道您想要的列表中的Href是否与您匹配:

toMatch.Any(myHrefValue.Contains)

导致以下代码:

var doc = new HtmlDocument();
doc.LoadHtml(input);
string[] toMatch = {"Rates","Foreign_Exchange","Equity","Credit","Commodities"};
var result = doc.DocumentNode
                .SelectNodes("//a[@href]")
                .Select(tag => tag.Attributes["href"].Value)
                .Where(link => toMatch.Any(s => link.Contains(s)));

您现在拥有匹配的所有Href。一个简单的.Count()是您需要的最后一步。

答案 1 :(得分:0)

使用正则表达式作为SSIS似乎是有限的。 你应该使用这样的模式:href="(Commodities|Credit|Equity|Foreign_Exchange|Rates)\/"

string pattern = @"href=""(Commodities|Credit|Equity|Foreign_Exchange|Rates)\/""";
var result = Regex.Matches(input, pattern).Count;

如果需要从db:

构建模式
string[] toMatch = { "Rates", "Foreign_Exchange", "Equity", "Credit", "Commodities" };
string pattern2  = @"href=""("+String.Join("|", toMatch)+@")\/""";

问题是如果您无法控制Html输入。因为这将匹配任何Href不仅链接。像这样的正则表达式:<a.*href="(Commodities|Credit|Equity|Foreign_Exchange|Rates)\/"