通り、住宅番号、郵便番号、都市を取得するには、カスタム(ドイツ語)のアドレス文字列に一致させる必要があります。私はRegExrとJava Visual Regex Testerで動作する正規表現を持っています。正規表現がJavaで動作しないのはなぜですか?
これは正規表現(配信が、編集可能)です:
^([^0-9]+)([0-9]+.*?)?(?:\w)?([0-9]{5})(?:\w)?(.*)$
これは文字列です:
NEUE BÜHNE Senftenberg, Theaterpassage 1, 01968 Senftenberg
は、これは私のコードです:スプリット用として
String regex = "^([^0-9]+)([0-9]+\\.*?)?(?:\\w)?([0-9]{5})(?:\\w)?(\\.*)$";
String address = "NEUE BÜHNE Senftenberg, Theaterpassage 1, 01968 Senftenberg";
Pattern pattern = Pattern.compile(regex);
String[] addrFromRegex;
// gives an array (length 1) with [0] == address
addrFromRegex = address.split(regex);
// gives an array (length 1) with [0] == address
addrFromRegex = pattern.split(address);
() 、問題はエスケープの誤りかもしれません。しかしパターンのために私はこれに気を付ける必要はないと思った。私は間違って何をしていますか?
更新:
ザ・、文字列には常に与えられていません。可能なアドレス文字列は次のとおりです。
NEUE BÜHNE Senftenberg; Theaterpassage 1; 01968 Senftenberg
NEUE BÜHNE Senftenberg Theaterpassage 1 01968 Senftenberg
NEUE BÜHNE Senftenberg|Theaterpassage|1|01968|Senftenberg
NEUE BÜHNE Senftenberg|Theaterpassage_1_01968_Senftenberg
...
私はXMLでアドレスを取得していますが、提供されるデータには何の影響もありません。ところで、ここで提供されるアドレスは、障害のあるアドレスの例です。私もそれらに対処しなければならない。
あなたが分割し、ないと一致する必要があります。 –
なぜあなたの式のJava版で '.'の前に\\を追加しましたか? – khelwood
'(?:\ w)?'は*非*単語の文字にマッチすると考えられていたので、 '\ W? 'でなければなりません。 [このJavaデモ](http://ideone.com/ZDljlb)をチェックしてください。 –