2016-08-04 7 views
-1

私は都市名や郵便番号に応じて都市のリストを表示することを可能にするJavaのコードを書こうとしています:市またはその郵便番号を表す文字列をアクセント記号で表す方法

多くの表現を書きましたが、100%は動作しませんでした。 は、これが私の最後の式である:

([A-Z_]+)(:)([0-9]+) 

式は都市名と一致する必要があります。それは次のようになります。Lonéy' edまたはそのコード郵便57000

誰もが私の表現を改善する方法のアイデアを持っていますか?

Thanx。

+0

試行 '(\ P {呂} [\ P {L} \ S' - ] *):(\ D +)'(Java文字列に二重バックスラッシュをリテラル)。 –

+0

@WiktorStribiżewThnxしかし、いいえ、それは方法では、数字を5に制限する方法はありませんか?郵便番号が5桁で構成されているため、 – Chinovski

+0

にスペースがありますか? – diginoise

答えて

2

Java7ので、あなたは、次の操作を行うことができます。すべてのニーズに対応するための接続文字を追加すること

Pattern.compile("([\\p{Alpha} '-_]+):(\\d{5})", Pattern.UNICODE_CHARACTER_CLASS)

キープ(ここでは[「-_])。

パターンでは、ラテン文字以外の一部のスクリプトのように、場所の名前の大文字と小文字は区別されません。

EDIT:追加5桁の郵便番号検出と

+0

それは働いているようです、あなたの表現を教えてくださいできますか? 'Pattern.UNICODE_CHARACTER_CLASS'にアクセント付きの文字が含まれていれば? – Chinovski

+0

すべての言語のすべての発音区別記号(アクセント付き文字)とラテン文字以外の文字を含みます。 – diginoise

+1

Btw、 'Pattern.UNICODE_CHARACTER_CLASS'は文字クラスではない修飾子フラグです。 'Pattern'クラスのJava APIを参照してください。 – diginoise

2

私が使用することをお勧め名検出のためのSPACE

"(?U)(\\p{Lu}[\\p{L}\\p{M}\\s'-]*):(\\d{5})\\b" 

それは意味:

  • (?U) - \bを作るPattern.UNICODE_CHARACTER_CLASSインラインフラグを単語bounsaryと\d数字クラスUnicodeはパターンで認識します
  • (\\p{Lu}[\\p{L}\\p{M}\\s'_-]*) - グループ1キャプチャ:
    • \\p{Lu} - 大文字のUnicode文字
    • [\\p{L}\\p{M}\\s'_-]* - のいずれかのUnicode文字(\\p{L})にある0個以上の文字、発音区別符号(\\p{M})、空白(\\s)、'_または-(それは文字通りハイフンとして扱われることができるようにハイフンが文字クラスの最後でなければならないことに注意)
  • : - 点灯ERAL結腸
  • (\\d{5}) - (グループ2)5桁
  • \\b - ワード境界我々は唯一のワード文字(110桁のストリングでない5桁の数字)と続いていない5桁の数字と一致するように、"(?!\\d)"と交換することができます

Java demo参照:

String s = "Lonéy' ed:57000"; 
Pattern pattern = Pattern.compile("(?U)(\\p{Lu}[\\p{L}\\p{M}\\s'-]*):(\\d{5})\\b"); 
Matcher matcher = pattern.matcher(s); 
while (matcher.find()){ 
    System.out.println(matcher.group(1)); 
    System.out.println(matcher.group(2)); 
} 
関連する問題