Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.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# 从字符串中获取日期部分_C# - Fatal编程技术网

C# 从字符串中获取日期部分

C# 从字符串中获取日期部分,c#,C#,在我的代码执行期间 doc2.LoadHtml(item.InnerHtml); string detail1 = item.InnerHtml.Trim(); string head1 = item.InnerText.Trim(); 我在头1中得到了这样的线索 “截至2011年10月20日油籽作物的商品贸易估算以及植物油的可用性”或 “2011年4月起的商品和针织”等 现在,

在我的代码执行期间

                    doc2.LoadHtml(item.InnerHtml);
                   string detail1 = item.InnerHtml.Trim();
                   string head1 = item.InnerText.Trim();
我在头1中得到了这样的线索

“截至2011年10月20日油籽作物的商品贸易估算以及植物油的可用性”或 “2011年4月起的商品和针织”等

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

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

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

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

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;
}

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

假设您只处理英语,那么如果从以下字符串列表开始:

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
并搜索仅包含以下内容的最长子字符串:

  • 其中一根弦
  • 标点符号
  • 数字
  • 空间
  • 假设子字符串代表日期

    这是正则表达式。只需选择找到的最长匹配项:

    /\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
    

    而且
    2011年4月
    ?类似地,您可以为该模式创建正则表达式。这就是问题所在。如果字符串中的日期部分是这样的“15.11.2013”,则dt返回日期,该日期是字符串的一部分,但对于类似“2013年3月”的情况,则不进入foreach循环。使用正则表达式Coach创建正则表达式,查看正则表达式是否有效。此链接可能会帮助您。。。当您否决某个问题时,请提供评论,以便提问者能够学习如何更恰当地提问(我没有否决该问题,因此我没有更具体的评论)。到目前为止,您在您身边做了哪些尝试?你最好也写下你的努力(代码),这样我们就可以更好地告诉你你的错误。请把你的问题写得清晰易懂。是否需要日期部分,即(2013年4月20日、2013年4月20日、2013年4月20日、2013年4月20日、2013年4月20日、2013年4月20日)。在2011年4月之类的输入问题中,无法提取日期部分