19

日時形式の文字列が与えられた場合、その形式に一致する最初の一致する部分文字列を見つける標準的な方法はありますか?

たとえば、与えられた...

d-MMM-yy H:mm:ss

そしていくつかのテキスト...

"blah 1 2 3 7-Jul-13 6:15:00 4 5 6 blah"

私はそれが戻ってくることを期待したい

"7-Jul-13 6:15:00"

これで、解析を行うことでこの文字列を見つけることができますが、これを行うためのライブラリ サポートがあるかどうか疑問に思っています。

4

6 に答える 6

7

多分このようなもの:

テキスト内の各単語を解析して書式文字列の各部分を見つけ、2 つを組み合わせて DateTime を作成します

string test = "blah 1 2 3 7-Jul-13 6:15:00  4 5 6 blah";

int formatPart = 0;
bool dateFound = false;
string format = "d-MMM-yy H:mm:ss";
DateTime myDateTime = DateTime.MinValue;
foreach (var item in test.Split(' '))
{
    DateTime dummy;
    if (DateTime.TryParseExact(item, format.Split(' ')[formatPart], null, DateTimeStyles.NoCurrentDateDefault, out dummy))
    {
        if (myDateTime == DateTime.MinValue)
        {
            formatPart++;
            myDateTime = dummy;
            dateFound = myDateTime.Date != DateTime.MinValue.Date;
            continue;
        }

        // If date was found first, add time, else add date
        myDateTime = dateFound
         ? myDateTime.Add(new TimeSpan(dummy.Hour, dummy.Minute, dummy.Second))
         : dummy.Add(new TimeSpan(myDateTime.Hour, myDateTime.Minute, myDateTime.Second));
        break;
    }
}

テスト済み:

Input: "blah 1 2 3 7-Jul-13 6:15:00  4 5 6 blah"
Format: "d-MMM-yy H:mm:ss"

Input: "blah 1 2 3 6:15:00 7-Jul-13 4 5 6 blah"
Format: "H:mm:ss d-MMM-yy"

Input: "blah 1 2 3 6:15:00 7-7-2013 4 5 6 blah"
Format: "H:mm:ss d-M-yyyy"

Input: "blah 1 2 3 07-07-2013 6:15:00  4 5 6 blah"
Format: "dd-MM-yyyy H:mm:ss" 
于 2013-07-08T00:55:34.093 に答える
1

NodaTimeを試すことができます:

var input = "blah 1 2 3 7-Jul-13 6:15:00 4 5 6 blah";
var pattern = "d-MMM-yy H:mm:ss";
var nodaPattern = NodaTime.Text
    .LocalDateTimePattern
    .Create(pattern, System.Globalization.CultureInfo.CurrentUICulture);
for (int i = 0; i < input.Length - pattern.Length; i++)
{
    var result = nodaPattern.Parse(input.Substring(i, pattern.Length));
    if (result.Success)
    {
        Console.WriteLine(result.Value);
        break;
    }
}
于 2013-07-08T08:11:48.037 に答える
0

次のような正規表現を試すことができます。

^[0-9]+-[a-z A-z]+-[0-9]+\s[0-9]+:[0-9]+:[0-9]+
于 2013-07-08T00:51:22.707 に答える