2017-08-10 11 views
-3

私は、代表的なスイスの住所を通り(および通り番号)と郵便番号(および場所の名前)に分割するソリューションを探しています。しかし、時にはそこにカンマがあると時々ないスイスの住所を通りや郵便番号に分割する方法は?

street: 'Bahnhofstrasse 1' 
place: '8001 Zürich' 

:私は探しています

'Bahnhofstrasse 1, 8001 Zürich' 

結果である:

は、私は次のアドレスを持っているが、提案します。しかし、郵便番号は常に4桁で構成されていますか?

これまでは.split( ')を使用していましたが、コンマがある場合にのみ動作します。

+1

データの最後の2つのフィールドは、常にzipとcityですか?私は最終的に4桁の数字を捜すことを慎重に考え、4桁の住所に当てるでしょう。 – AlG

+0

@ AIGご意見ありがとうございます。はい、正確に。 「通り」は名前でもよいが、最後の2つのフィールドは常にジップと都市である。私はかなり4桁の通り番号がないと確信していますが、良い点。 –

答えて

3

私は()丸括弧間のすべてがキャプチャグループ によってである^(.*?),?\s*(\d{4}\D+)$Demo

^    # Start of string/line 
(    # Capturing Group (1) 
    .    # Any character except line break 
    *?   # (zero or more)(lazy) 
)    # End of Capturing Group (1) 
,    # "," 
?    # (zero or one)(greedy) 
\s    # <whitespace character> 
*    # (zero or more)(greedy) 
(    # Capturing Group (2) 
    \d   # <digit 0-9> 
    {4}   # (repeated {4} times) 
    \D   # <character that is not a digit> 
    +    # (one or more)(greedy) 
)    # End of Capturing Group (2) 
$    # End of string/line 
+0

@ alpha bravoありがとうございました。これはまさに私が探していたものです! –

0
(?P<street>.*?[0-9]+)(?P<place>.*?[0-9]+.*) 

Explaination

このパターンを使用して、それらの中に数字を持っている都市名を期待していません?P<street>を追加すると、名前の通りが表示されます(これはオプションですが、読みやすい)。組み合わせこの情報は、このために素敵な正規表現を作る

必要に応じて拡大し、ゼロと無限の時間の間の一致、可能な限り数回のように:

[0-9]+

.*?は(怠け者)すべてを意味1以上の数を意味し、状況

enter image description here