web-dev-qa-db-ja.com

Java _all_空白文字に一致する正規表現

Javaで正規表現を探しています。これは文字列内のすべての空白文字に一致します。「\ s」は一部のみに一致し、_ _および類似の非ASCIIに一致しませんホワイトスペース:Java String。

[編集]

明確にするために、私は文字列シーケンス "_ _"を意味するのではなく、 "_ _"で表されることが多いSincleユニコード文字U + 00A0を意味します。 HTML、および同様の空白を含む他のすべてのUnicode文字、たとえば「NARROW NO-BREAK SPACE」(U + 202F)、Unicode 3.2以上でU + 2060としてエンコードされたWordジョイナー、「ZERO WIDTH NO-BREAK SPACE」(U + FEFF)、および白として再配置できるその他の文字スペース。

[回答]

私の目的、つまりすべての空白文字、ユニコ​​ード+トラディショナルをキャッチする場合、次の式でうまくいきます。

_[\p{Z}\s]_

答えは以下のコメントにありますが、少し隠されているのでここで繰り返します。

30
Carsten

 はHTMLの空白のみです。 HTMLパーサー を使用して、プレーンテキストを抽出します。および\sは問題なく動作するはずです。

11
Andomar

あなたは私が予想したとおりに質問を明確にしました。実際には、文字列リテラル を探しているわけではありません。

残念ながら、正規表現を使用してそれらを照合する方法はありません。最善の方法は、特定のコードポイントをパターンに含めることです(例:"[\\s\\xA0]")。

Editコメントの1つで判明したように、これには ndocumented"\\p{Z}"を使用できます。アラン、どうやってそれを見つけたのかコメントを残してくれませんか?これはとても便利です。

11
BalusC

ここに私が「空白」のいくつかの競合する定義から作った要約があります:

http://spreadsheets.google.com/pub?key=pd8dAQyHbdewRsnE5x5GzKQ

プレハブのものと一致しない、気になる追加のものを明示的にリストしなければならない場合があります。

3

 は空白ではありません。 HTMLの空白を表す文字エンコードシーケンスです。ほとんどの場合、HTMLエンコードされたテキストをプレーンテキストに変換してから、文字列照合を実行します。その場合は、javax.swing.text.htmlを調べてください。

2
Zak

誰かがこの質問に再度遭遇して助けを求めている場合は、次の答えを追求することをお勧めします: https://stackoverflow.com/a/6255512/1678392

短いバージョン:\\p{javaSpaceChar}

理由: Pattern class ごとに、これは Character.isSpaceChar メソッドをマップします。

Java.lang.Characterブールのismethodnameメソッドのように動作するカテゴリ(非推奨のものを除く)は、同じ\ p {prop}構文。指定されたプロパティの名前はJavamethodnameです。

????

2
skia.heliou

正規表現文字は、エンコーディングに依存しない唯一のものです。 Unicodeで印刷できない文字のリストを次に示します。

一般的に使用されている非印刷文字の数は?

0