1

必要なものを取得するために、数百 (数千ではないにしても...) の正規表現を試してみましたが、どれも機能しませんでした。

TimeSpan を表す正規表現を探しているだけですdays.hours:minutes:seconds: 7.00:00:00 は「7日」を表します

これは残念ながら機能しません:

(\d\d).(\d\d):(([0-6][0])|([0-5][0-9])):(([0-6][0])|([0-5][1-9]))

4

5 に答える 5

3

これは技術的にはより正確で、おそらくより効率的です。

\d+\.((0?\d)|(1\d)|(2[0-3]))(:[0-5]\d){2}
于 2012-09-15T16:09:24.847 に答える
1

これは、Regex パターンで 2 桁の日数が想定されているのに、1 桁しかないためです。最初の桁を ? でオプションにするだけです。

(\d?\d)\.(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9]))

または、+ を使用して 1 つ以上に一致させるだけでもよいでしょう。そのパターンは 100 日と一致しないからです。

(\d+)\.(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9]))
于 2012-09-15T16:06:44.060 に答える
1

以下の正規表現は、「[-][[dd.]HH:]mm[:ss[.fffffff]]」パターンを認識し、名前付きグループを使用します。

(?:(?<ne>-))?(?:(?:(?<dd>0*[0-9]+)[.])?(?:(?<HH>0*[2][0-3]|0*[1][0-9]|0*[0-9])[:]))?(?<mm>(?<=:)0*[0-5]?[0-9]|0*[5-9]?[0-9](?=[:]))(?:[:](?<ss>0*[0-5]?[0-9](?:[.][0-9]{0,7})?))?

C# コード:

/// <summary>Time Span Standard regular expression.</summary>
/// <remarks>
/// Minutes are mandatory with required colon from left or right.
/// Pattern: [-][[dd.]HH:](:mm|mm:)[:ss[.fffffff]]
/// </remarks>
public const string TimeSpanStandard =
    @"(?:(?<ne>-))?" +
    @"(?:(?:(?<dd>0*[0-9]+)[.])?(?:(?<HH>0*[2][0-3]|0*[1][0-9]|0*[0-9])[:]))?" +
    @"(?<mm>(?<=:)0*[0-5]?[0-9]|0*[5-9]?[0-9](?=[:]))" +
    @"(?:[:](?<ss>0*[0-5]?[0-9](?:[.][0-9]{0,7})?))?";

: このパターンは、「dd.HH」を無効な形式として扱います。この正規表現を使用して JSON 文字列の TimeSpan を検索して置換し、「dd.HH」形式のサポートが通常の数値を誤って取得する可能性があるため、これはうまくいきます。

正規表現の例:

-01.23:59:30.999999 - ✔

    Match  1   0-19 -01.23:59:30.999999
    Group ne   0-1  -
    Group dd   1-3  01
    Group HH   4-6  23
    Group mm   7-9  59
    Group ss 10-19  30.999999

Regex Pass:

    01.02:03:04.05 - ✔
    01.02:03:04 - ✔
    01.02:03 - ✔
    02:03:04.05 - ✔
       03:04.05 - ✔
    02:03 - ✔
    02:03:04 - ✔

Regex Fail:

    1.03:04.05 - ✗
         04.05 - ✗
于 2021-07-13T15:00:54.323 に答える