0

私書箱のバリエーションをキャッチするために素晴らしい仕事をする正規表現ライブラリから次の正規表現があります。それが行わない唯一のことは、末尾の数字を一致させることです。

私書箱123

誰かがこの正規表現を末尾の数字にも一致するように変更するのを手伝ってもらえますか?

\b[P|p]?(OST|ost)?\.?\s*[O|o|0]?(ffice|FFICE)?\.?\s*[B|b][O|o|0]?[X|x]?\.?\s+[#]?(\d+)\b

ありがとう。

4

4 に答える 4

3

「私書箱123」の末尾の数字が「123」であると仮定すると、正規表現それらと一致します。それは、3を逆参照するための数さえもキャプチャします。

正規表現には多数の欠陥があります。たとえば、に一致しOST|||| 0ます。

私自身の私書箱の正規表現を提案してもいいですか?

^(?:Post (?:Office )?|P[. ]?O\.? )?Box #?([0-9]+)

改行で作成^して一致させるオプション(通常は)を有効にし、大文字と小文字を区別しないオプション(通常は)を有効にします。フリースペースオプションを有効にしないでください(通常は)。$/m/i/x

一致する文字列の例を次に示します。

  • 私書箱#123
  • ポストボックス123
  • 私書箱123
  • 私書箱123
  • ポー。ボックス123
  • 私書箱123
  • ボックス123

末尾の番号は、後方参照1にキャプチャされます。

于 2012-05-29T18:58:55.587 に答える
1

\d+=1つ以上の数字。そこにあります。http://regexpal.com/を使用してください。これは命の恩人です。私書箱2334328789791297を試してみましたが、他のバリエーションもありました。あなたのコードは(一見すると)うまく見えます。

于 2012-05-29T18:51:24.190 に答える
0

上記の@slevithanの回答から作業し、いくつかの改善を追加しましたが、編集として拒否されました。

 (^|(?:post(al)? *(?:office *)?|p[. ]*o\.? *))box *#? *(\w+)

上記のケースに一致することに加えて、それは、間にもっと多くのスペース、またはスペースの不足、および郵便/郵便の短い順列と完全な順列の両方を許可します。ボックス識別子に文字を使用することもできます。警告:パターンで複数行および大文字と小文字を区別しないモードを有効にしてください。

ここに画像の説明を入力してください

于 2013-03-30T00:03:18.940 に答える
0

私書箱の検証を処理するために作成したパターンは、私書箱の任意の組み合わせを処理し、末尾の数字、文字、数字も処理します。

パターンパターン=Pattern.compile( "([P]?(OST | 0ST)?\ s * [.-]?\ s * [O | 0]?(FFICE)?\ s * [.-]?\ s * [B] [O | 0] [X] \ s *)。* ");

それは私にとってはうまく機能しています。私はそれを多くの組み合わせでテストしました。

何か問題があれば教えてください。

注:末尾のシーケンスではなくPO bOxだけを取得する必要がある場合は、末尾から。*を削除するだけで、その目的が解決されます。私書箱は大文字であると想定しています。

于 2013-10-23T13:21:49.780 に答える