-1

これらのパターンの正規表現を作成しようとしています。

[num] [am]
[num] [pm]
[num] [-] [num]
[num] [:] [num]

スペースありまたはスペースなし

文中に時間があるかどうかを判断することです。理想的には、実際に時間を解析します。文は次のようになります:

“This event is at 9am at…”
“Blues, 5:30, pressroom..”
“Meet at 5pm!”
“All night 9-8 rockin’ it!”

私のプロジェクトは、関連性がある場合に備えて.NETにあります。

4

3 に答える 3

1

柔軟な正規表現を1つ持つのではなく、複数の正規表現(一致させたいパターンのタイプごとに1つ)を使用し、一致するまでそれぞれを適用します。このアプローチを使用して、あいまいな時間仕様を特定できることに注意してください。

このアプローチは、コーディングと保守がはるかに簡単です(将来、より多くの時間形式が必要になる可能性があり、すでに複雑で柔軟な正規表現を変更するのではなく、新しい特定の正規表現を追加するのは簡単です)。

于 2012-12-12T15:07:52.100 に答える
1

あなたの定義を考えると、このようなことはあなたができることと同じくらい良いと思います:

"\\b(1[012]|[1-9])(\\s?(am|pm)|:[0-5][0-9]|-(1[012]|[1-9]))\\b"

これには、1 時間は 1 ~ 12、分は 0 ~ 59 である必要があります。また、時間の前後に単語の境界が必要です。ダッシュやコロンの周りにスペースを入れることはできません。

[num]-[num]それにもかかわらず、定義上、特に日付やその他のものによく似た形式では、多くの誤検知が発生します。

ここでテスト済み。特定の .NET テスターは見つかりませんでしたが、すべて標準的なものだと思います。

于 2012-12-12T15:26:34.163 に答える
0

その「文法」から正規表現を構築するのは非常に簡単です。RegExes を見てください!

/(\d{1,2})\s*([:-]\s(\d{1,2})|am|pm)/

私はあなたの数字を2文字までに制限しました.とにかく時間が有効な範囲にあるかどうかを調べるので、それを省略するかもしれません. 一致した文字列を解析するには、結果から一致するグループを抽出します。

于 2012-12-12T15:23:10.723 に答える