0

次のような文字列があります。

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

私がする必要があるのは、TSXシンボルの変更-12月17日-12月21日を引き出すことです。Regex.IsMatchがこの状況で機能することを他のさまざまな投稿で読みましたが、私が抱えている問題は、12月17日から21日が毎週変更されることです(つまり、来週コードを実行すると、名前がTSXシンボルの変更に変更されます-12月24日-12月28日)。それで、とにかく私はTSXシンボルの変更だけを探すことができ、それが見つかったら、それ以降の日付も取得できますか?

4

2 に答える 2

2

コードブローを試すことができます。

    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>","");
于 2012-12-18T15:18:12.870 に答える
0

Html Agility PackHTMLを解析する必要がある場合に使用します。

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));
        }
    }
于 2012-12-18T15:23:46.953 に答える