質問

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

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

ただし、これは21.01.08から21.01および10.00に一致します。

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

更新:

申し訳ありませんが、もっと明確にすべきでした。データと時間は、より大きな文字列の一部です。その文字列から時間を抽出したい。

例:

" 10.00から21.01.08に、図書館でパーティーが開催されます" " 21.08.08-10:00にパーティーが開かれます" " 08.08.08に予定されています... ...は10.00から始まる"

これは可能ですか?

役に立ちましたか?

解決

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

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

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

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

他のヒント

^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})$

時間部分をキャプチャグループに入れてトリックを行う必要があります。

"新しいRegExp"わからない(おそらく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})<*>quot;);
  string dateTimeString = "21.01.08 10.00";
  if (r.IsMatch(dateTimeString)) {
    string timePart = r.Match(dateTimeString).Groups[1].Value;
    Console.Write(timePart);
  }
  Console.ReadKey();

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

使用してみる

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top