0

正規表現を使用してテキストの一部を抽出したいと思います。たとえば、私は住所を持っていて、番号と通りだけを返し、残りを除外したいとします。

2222 Main at King Edward Vancouver BC CA

ただし、ほとんどの場合、アドレスの形式は異なります。Lookbehind Regexを使用してみたところ、次の式が出てきました。

.*?(?=\w* \w* \w{2}$)

上記の式は上記の例をうまく処理しますが、テキストにコンマが入るとすぐに面倒になりすぎます。郵便番号は、6文字の文字列または中央にスペースがある2つの3文字の文字列などです。

後読み正規表現以外のテキストの一部を抽出するよりエレガントな方法はありますか?

他の方向への提案やポイントは大歓迎です。

ありがとう!

4

3 に答える 3

2

正規表現は、パターンに従うREGULARのデータ用です。したがって、データが完全にランダムである場合、いいえ、正規表現を使用してこれを行うためのエレガントな方法はありません。

一方、必要な値がわかっている場合は、いくつかの単純な正規表現を記述して、各文字列でそれらすべてをテストすることができます。

元。regex1 =住所#グラバー、regex2 =ストリートタイプグラバー、regex3=名前グラバー。

string1でregex1、regex2、最後にregex3との一致を試みます。次の文字列に移動します。

于 2009-07-09T23:42:29.213 に答える
1

さて、私は帽子をリングに投げ込むと思います:

.*(?=,? ([a-zA-Z]+,?\s){3}([\d-]*\s)?)

そして、あなたは良い測定のために^または最前線にいるかもしれません 、そして私は郵便番号の長さをわざわざ指定しませんでした...これの文字ハイフンの量だけ。\d+

これまでのところ、これらの入力と、市/州/国のエリア内のコマのバリエーションに対して機能します。

  • 2222メイン、キングエドワードバンクーバー、BC、CA、333-333
  • 555道路および通りの場所CAUS95000
  • 2222メインキングエドワードバンクーバーBCCA333
  • 555道路と通りの場所CAUS

市、州、国の最後に3つの単語があることを数えていますが、それ以外はryansstackが言ったように、ランダムだと機能しません。都市がニューヨークのように2つの単語である場合、それは機能しません。ええ...正規表現はこれのためのツールではありません。

ところで:regexhero.netでテスト済み

于 2009-07-09T23:59:40.957 に答える
0

私はあなたがこれを行うことができる2つの方法を考えることができます

1)アドレスの後のデータの「残り」が正確に2つのフィールド、つまりBCとCAであることがわかっている場合は、スペースを区切り文字として使用して文字列を分割し、最後の2つの項目を削除できます。

2)区切り文字/ [AZ] [AZ] /で分割を行い、結果を配列に格納します。次に、配列を出力します(これは、アドレスに2つ以上の大文字が含まれていない場合に提供されます)

于 2009-07-10T00:14:58.890 に答える