从字符串获取日期部分

时间:2013-11-18 13:42:42

标签: c#

在我的代码执行期间

                    doc2.LoadHtml(item.InnerHtml);
                   string detail1 = item.InnerHtml.Trim();
                   string head1 = item.InnerText.Trim();

我在head1中得到了像这样的字符串

“2011年10月20日油籽作物的商品贸易估算及植物油的供应”或 “2011年4月的商品和针织品”等

现在我想只从该字符串中添加Date部分来插入与该帖子自动相关的日期,而不是手动。 head1字符串中的日期部分可能如下所示

>"______20.10.2011", 
>"______April, 2011"______, 
>"______Nov. 2008 to Oct. 2009", 
>"___2007-08 (Nov.-Oct.)______"

我用什么函数或正则表达式只从字符串中获取日期部分???

2 个答案:

答案 0 :(得分:0)

这将提取,解析和打印输入文本中的所有日期:

var regex = new Regex(@"\b\d{2}\.\d{2}.\d{4}\b");
foreach(Match m in regex.Matches(inputText))
{
    DateTime dt;
    if (DateTime.TryParseExact(m.Value, "dd.MM.yyyy", null, DateTimeStyles.None, out dt))
        Console.WriteLine(dt.ToString());
 }

现在,如果你只是想要第一个约会,你可以这样做:

static DateTime? GetFirstDateFromString(string inputText)
{
var regex = new Regex(@"\b\d{2}\.\d{2}.\d{4}\b");
foreach(Match m in regex.Matches(inputText))
{
    DateTime dt;
    if (DateTime.TryParseExact(m.Value, "dd.MM.yyyy", null, DateTimeStyles.None, out dt))
        return dt;
}
return null;
}

请注意,该方法返回一个可为空的DateTime,以便在字符串不包含日期时返回null。

答案 1 :(得分:0)

假设你只处理英语,如果你从这个字符串列表开始怎么办?

January
February
March
April
May
June
July
August
September
October
November
December
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Sept
Oct
Nov
Dec
to

搜索了仅包含的最长子字符串:

  1. 其中一个字符串
  2. 标点符号
  3. 位数
  4. 空间
  5. 并假设substring表示日期?

    这是RegEx。只需选择它找到的最长匹配:

    /\b(January|February|March|April|May|June|July|August|September|October|November|December|Jan|Feb|Mar|Apr|Jun|Jul|Aug|Sep|Sept|Oct|Nov|Dec|to|[^A-Za-z])+\b/gi