6

時間、日付、ピンの 3 つのグループがあります。そして、私はこの行と一致するようにこの行を持つことができます:

26/06/2012 33:06:12a_user_logged_in,3412234,2,3,512,3 33:06:12a_user_logged_in,3412234,2,3,512,3,26/06/2012 26/06/2012 a_user_logged_in_at,33:06:12, 3412234,2,3,512,3

組として、組として26/06/2012、組として合わせたい。date33:06:12time3412234pin

私はそうすることに成功しましたが、線だけが最初のもののような特定のパターンでなければなりません

(?<date>[\d]+/[\d]+/[\d]+) (?<time>[\d]+:[\d]+:[\d]+)([ |,][a-zA-z]*)+,(?<pin>[\d]{4,10}).+ 

しかし、このパターンを他の 2 行のフォームに適用すると、一致しませんでした。

私の質問は、線の形式に関係なく、時間、日付、およびピン グループを一致させる方法です。

4

2 に答える 2

10

式の間に追加するだけ|です:

(?<date>[\d]+/[\d]+/[\d]+)|(?<time>[\d]+:[\d]+:[\d]+)|(?<pin>(?<=[^/])[\d]{4,10})
于 2012-12-23T23:40:29.973 に答える
5

同時にパターンを検証したくない場合は、文字列の先頭から先読みを使用できます。それらは実際には何も消費しないため、エンジンは 1 つの先読みを完了すると最初に戻ります。したがって、3 つの一致の順序は重要ではありません。

^(?=.*(?<date>\d+/\d+/\d+))(?=.*(?<time>\d+:\d+:\d+))(?=.*,(?<pin>\d{4,10}))

グループ,の前に注意してください。pinそうしないと、年がピンとして検出される危険があります (これも 4 桁であるため)。

しかし、繰り返しになりますが、コードを読みやすくするために、それを 3 つのパターンに分割することもできます (これによりキャプチャも回避されるため、それほど遅くなることはありません)。

Pattern for date: \d+/\d+/\d+
Pattern for time: \d+:\d+:\d+
Pattern for pin:  (?<=,)\d{4,10}

これらは、一致全体として目的の値を提供するだけです。

于 2012-12-23T23:24:42.707 に答える