4

文字列の時刻 (10.00) と日付と時刻 ("21.01.08 10.00") を一致させたいと思います。次の正規表現を使用しています。

new RegExp("\\b[0-9]{1,2}\\.[0-9]{1,2}\\b" "g");

しかし、これは 21.01.08 と 10.00 から 21.01 に一致します。

正規表現エンジンとして PCRE を使用しています。

アップデート:

すみません、もっとはっきり言うべきでした。日付と時刻は、より大きな文字列の一部です。その文字列から時間を抽出したい。

例えば:

「21.01.08 の 10.00 から図書館でパーティーが開催されます」 「21.08.08 - 10:00 にパーティーが開催されます」 10.00 から開始"

これは可能ですか?

4

3 に答える 3

4

\b(単語境界)が「。」で一致するため、元の正規表現は機能しませんでした。「21.01.08」で。境界をより堅牢にコーディングする必要があります。

(?:[^\d:.]|^)(\d\d?[.:]\d\d)(?![.:\d])

これは、日付を除外しながら、使用した表記のいずれかで時間をキャプチャします。時刻は検証されないことに注意してください。たとえば、「88:99」と一致します。時間の検証は可能ですが、パターンが非常に複雑になり、ほとんどの状況でやり過ぎになる可能性があります。

非キャプチャ グループの代わりに後読みを使用すると便利ですが、PCRE は可変幅後読みをサポートしていません。

于 2008-10-16T17:03:16.043 に答える
1
^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})$

時間の部分をキャプチャ グループに入れることでうまくいくはずです。

「新しい正規表現」についてはよくわかりません(おそらくJava?)。Perlでは、次のような値を取得できます...

if ("21.01.08 10.00" =~ m/^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})$/g) {
  $time_part = $1;
}

.NETでは、以下が機能するはずです...

  Regex r = new Regex(@"^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})$");
  string dateTimeString = "21.01.08 10.00";
  if (r.IsMatch(dateTimeString)) {
    string timePart = r.Match(dateTimeString).Groups[1].Value;
    Console.Write(timePart);
  }
  Console.ReadKey();

キャプチャ グループへのインデックスよりも曖昧でないものを使用する場合は、名前付きキャプチャを使用することもできます。

于 2008-10-16T16:07:49.307 に答える
0

使ってみて

new RegExp("\\b[0-9]{1,2}\\.[0-9]{1,2}$" "g");

$ は文字列の終わりを示します

于 2008-10-16T16:05:20.280 に答える