我有一个看起来像这样的字符串:
<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 Symbol Changes - December 24日 - 12月28日)。那么无论如何我只能找到TSX符号变化,并且一旦找到它就会检索它之后的日期吗?
答案 0 :(得分: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>","");
答案 1 :(得分:0)
如果您需要解析html,请使用Html Agility Pack
。
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));
}
}