9

假设我有以下字符串之一:

"Hello, I'm a String... This is a Stackoverflowquestion!! Here is a Date: 16.03.2013, 02:35 and yeah, plain text blah blah..-."

"This the other string! :) 22.11.2012. Its a Date you see"

"Here we have 2 Dates, 23.12.2012 and 14.07.2011"

从字符串 (in ) 中获取这些日期的最佳和最快方法是DateTime什么?

(仅字符串中第一次出现的日期)

理想的回报:

String 1: 16.03.2013 (as a DateTime)
String 2: 22.11.2012 ("           ")
String 3: 23.12.2012 ("           ")

所以我会调用一个类似的方法:

DateTime date1 = GetFirstDateFromString(string1);
4

5 回答 5

20

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

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

请注意,该方法返回一个 nullable DateTime,因此当字符串不包含日期时它可以返回 null。

于 2013-04-25T19:08:21.063 回答
7

如果您的日期始终采用该格式,您可以尝试使用正则表达式来获取日期字符串,然后使用它DateTime.ParseExact来获得您想要的结果:

public DateTime? GetFirstDateFromString(string input)
{
    DateTime d;

    // Exclude strings with no matching substring
    foreach (Match m in Regex.Matches(input, @"[0-9]{2}\.[0-9]{2}\.[0-9]{4}"))
    {
        // Exclude matching substrings which aren't valid DateTimes
        if (DateTime.TryParseExact(match.Value, "dd.MM.yyyy", null, 
            DateTimeStyles.None, out d))
        {
            return d;
        }
    }
    return null;
}
于 2013-04-25T19:07:48.640 回答
1

尝试这个:

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static DateTime? GetFirstDateFromString(string input);
   {
      string pattern = @"\d{2}\.\d{2}\.\d{4}";
      Match m = Regex.Match(input, pattern);
      DateTime result;
      foreach(string value in match.Groups)  
          if (DateTime.TryParseExact(match.Groups[1], "dd.MM.yyyy", CultureInfo.CurrentCulture, DateTimeStyles.None, out result)
              return result;
      return null;
   }
}
于 2013-04-25T19:09:54.057 回答
1

对我来说,这段代码可以从包含日期的字符串文本中获取日期。

var regex = new Regex(@"\d{2}\/\d{2}\/\d{4}");
 foreach (Match m in regex.Matches(line))
 {
  DateTime dt;
  if (DateTime.TryParseExact(m.Value, "MM/dd/yyyy", null, DateTimeStyles.None, out dt))
  remittanceDateArr[chequeNo - 1] = dt.ToString("MM/dd/yyyy");                                   
  rtbExtract.Text = rtbExtract.Text + remittanceDateArr[chequeNo - 1] + "\n";
                            }
于 2019-02-08T21:42:52.063 回答
0

创建一个方法,其参数是正则表达式,以捕获日期格式和从中提取日期的字符串。我相信如果您没有将要使用的格式,那么将无法从字符串中的一系列字母数字字符中提取日期。

于 2013-04-25T19:07:17.577 回答