2009-07-09 18 views
0

正規表現を使用してテキストの一部を抽出したいとします。したがって、たとえば、私がアドレスを持っているだけの数や通りを返し、残りを除外したい:RegExを使用してテキストの一部を抽出する

2222 Main at King Edward Vancouver BC CA 

しかし、アドレスが形式でほとんどの時間を変化させます。私は後方参照正規表現を使用してみましたし、この式で出てきた:

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

上記の式うまく上記の例を処理しますが、それは、すぐにカンマがテキストに入って来ると、あまりにも乱雑なり、6ことができ郵便番号文字列または2つの3文字の文字列の中に空白が含まれています。

lookbehind regex以外のテキストの部分を抽出する方法はありますか?

他のご提案やポイントは大変ありがとうございます。

ありがとうございます!

+1

参考にしてください。 –

+0

ありがとう!私はそれを覚えています。 – Jaime

答えて

2

正規表現は、パターンに続くREGULARのデータです。あなたのデータが完全にランダムであれば、正規表現でこれを行うためのエレガントな方法はありません。

一方、あなたが望む値がわかっているなら、おそらく単純な正規表現をいくつか書いて、各文字列ですべてをテストするだけです。

Ex。 regex1 =アドレス#グラバー、regex2 =ストリートタイプグラバー、regex3 =名前グラバー。

string1の正規表現をregex1、regex2、およびregex3と一致させようとします。次の文字列に移動します。

+0

それは私が思ったものです。ああ、私は面倒なことをやらなければならないと思う。 ありがとう、ライアン! – Jaime

1

だけでなく、私はリングに私の帽子を投げるだろうTHOT:

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

、あなたは良い測定のためにフロントで^または\d+
たいかもしれませんし、私は長さを指定して気にしませんでした郵便番号...ちょうど任意の量の文字がこの中でハイフンです。

それはこれまでのところ、これらの入力のために働き、市/状態/国の領域内の昏睡のバリエーション:キングエドワードバンクーバー、BC、CA、333から333

  • 555で

    • 2222メイン道路や街路地CA、米国95000
    • 2222メイン王のエドワード・バンクーバーBC CA 333
    • 555道路や街路地CA、米国

    都市、州、国の最後に3つの単語があるとカウントされていますが、それ以外はryansstackが言ったように、ランダムであれば動作しません。街がニューヨークのような2つの言葉なら、それはうまくいかないでしょう。うーん...正規表現は、このためのツールではありません。

    btw:regexheroでテスト済みです。ネット

    私はあなたがすることができる2つの方法を考えることができ
  • +0

    ビクターに感謝します!私は私の最後にもっとデータでそれを試してみるでしょう。 – Jaime

    +0

    誰かがJSFiddleを投稿できますか? –

    0

    この

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

    2)デリミタ/ [A-Z] [A-Z] /を分割して結果を配列に格納します。配列をプリントアウトします(アドレスに2つ以上の大文字が含まれていないことが条件です)

    +0

    ありがとうございました。感謝します! – Jaime

    関連する問題