Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从HTML中查找特定的内容_C#_.net_Html Parsing - Fatal编程技术网

C# 从HTML中查找特定的内容

C# 从HTML中查找特定的内容,c#,.net,html-parsing,C#,.net,Html Parsing,我有一个字符串如下所示: <br /><br />\n\n<p><font size=\"4\" face=\"Courier New\"> TSX Symbol Changes -December 17th - December 21st</font><br> \n\nTSX符号更改-12月 12月17日至21日 我需要做的是拉出TSX符号更改-12月17日至12月21日。我在其他各种帖子上读到Regex.Is

我有一个字符串如下所示:

<br /><br />\n\n<p><font size=\"4\" face=\"Courier New\"> TSX Symbol Changes -December    
17th - December 21st</font><br>


\n\nTSX符号更改-12月 12月17日至21日

我需要做的是拉出TSX符号更改-12月17日至12月21日。我在其他各种帖子上读到Regex.IsMatch适用于这种情况,但我遇到的问题是12月17日至21日每周都会更改(即,当我下周运行代码时,名称将更改为TSX符号更改-12月24日至12月28日)。那么,我是否可以只查找TSX符号的更改,一旦找到,还可以检索它之后的日期?

您可以尝试代码bleow

    var str1 = "<br /><br />\n\n<p><font size=\"4\" face=\"Courier New\"> TSX Symbol Changes -December 17th - December 21st</font><br>";
    var str2 = str1.Substring(str1.IndexOf("TSX Symbol Changes")).Replace("</font><br>","");
var str1=“

\n\nTSX符号更改-12月17日-12月21日
”; var str2=str1.Substring(str1.IndexOf(“TSX符号更改”)。替换(“
”,”);
如果需要解析html,请使用

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);  // this is your string

string wordToFind = "TSX Symbol Changes -";
var fontTSX = doc.DocumentNode.Elements("font")
    .FirstOrDefault(f => f.InnerText.Contains(wordToFind));
if (fontTSX != null)
{
    string innerText = fontTSX.InnerText.Trim();
    innerText = innerText.Substring(innerText.IndexOf(wordToFind) + wordToFind.Length);
    String[] words = innerText.Split();
    String monthName = words.First();
    var monthInfo = CultureInfo.InvariantCulture.DateTimeFormat.MonthNames
        .Select((mn, i) => new{ MonthName = mn, Value = i+1 })
        .FirstOrDefault(x => x.MonthName.Equals(monthName, StringComparison.OrdinalIgnoreCase));
    if (monthInfo != null)
    {
        int month = monthInfo.Value;
        int day = int.MinValue;
        // now extract your range
        IEnumerable<int> days = words
            .Where(w => w.Length >= 2 && int.TryParse(w.Substring(0, 2), out day))
            .Select(w => day)
            .Take(2);
        if(days.Count() == 2)
        {
            DateTime startDate = new DateTime(DateTime.Now.Year, month, days.ElementAt(0));
            DateTime endDate = new DateTime(DateTime.Now.Year, month, days.ElementAt(1));
        }
    }
HtmlAgilityPack.HtmlDocument doc=新的HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);//这是你的绳子
string wordToFind=“TSX符号更改-”;
var fontTSX=doc.DocumentNode.Elements(“字体”)
.FirstOrDefault(f=>f.InnerText.Contains(wordToFind));
如果(fontTSX!=null)
{
字符串innerText=fontTSX.innerText.Trim();
innerText=innerText.Substring(innerText.IndexOf(wordToFind)+wordToFind.Length);
String[]words=innerText.Split();
String monthName=words.First();
var monthInfo=CultureInfo.InvariantCulture.DateTimeFormat.MonthNames
.Select((mn,i)=>new{MonthName=mn,Value=i+1})
.FirstOrDefault(x=>x.MonthName.Equals(MonthName,StringComparison.OrdinalIgnoreCase));
if(monthInfo!=null)
{
整月=月信息值;
int day=int.MinValue;
//现在提取你的射程
i数日=字数
其中(w=>w.Length>=2&&int.TryParse(w.Substring(0,2),out day))
.选择(w=>day)
.采取(2);
如果(天数()==2)
{
DateTime startDate=新的日期时间(DateTime.Now.Year,month,days.ElementAt(0));
DateTime endDate=新的日期时间(DateTime.Now.Year,month,days.ElementAt(1));
}
}
如果需要解析html,请使用。如果您确定“TSX”始终位于字符串的开头,只需在字符串中找到该子字符串的索引,并向前计数到第一个”