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"

文字列からこれらの日付を取得するための最良かつ最速の方法は何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;
}

このメソッドは nullableDateTimeを返すため、文字列に日付が含まれていない場合に 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 に答える
0

日付形式と日付を抽出する文字列を取得するための正規表現をパラメータとするメソッドを作成します。使用する形式がない場合、文字列内の一連の英数字から日付を抽出することはできないと思います。

于 2013-04-25T19:07:17.577 に答える