15

私はこの正規表現を使用しています:

x.split("[^a-zA-Z0-9']+");

これは、文字や数字を含む文字列の配列を返します。

私がこれを使用する場合:

String name = "CEN01_Automated_TestCase.java";
String[] names = name.Split.split("[^a-zA-Z0-9']+");

私が得た:

CEN01
Automated
TestCase
Java

しかし、これを使用すると:

String name = "CEN01_Automação_Caso_Teste.java";
String[] names = name.Split.split("[^a-zA-Z0-9']+");

私が得た:

CEN01
Automa
o
Caso
Teste
Java

この正規表現を変更してアクセント記号付きの文字を含めるにはどうすればよいですか? (á、ã、õなど...)

4

5 に答える 5

10

http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.htmlから

メソッドのように動作するカテゴリ(非推奨のものを除く) は、指定されたプロパティが name を持つ同じ構文で利用できます。java.lang.Character boolean ismethodname\p{prop}javamethodname

CharacterクラスにisAlphabeticは使用できるメソッドが含まれているため

name.split("[^\\p{IsAlphabetic}0-9']+");

使用することもできます

name.split("(?U)[^\\p{Alpha}0-9']+");

ただし、正規表現UNICODE_CHARACTER_CLASSを追加して使用できるフラグを使用する必要があります。(?U)

于 2013-03-06T19:37:01.930 に答える
2

Java Documentation on Regular Expressionsを確認します。あなたが探しているかもしれないと私が信じているユニコードセクションがあります。

編集:例

別の方法は、探している文字コードを照合することです。例えば

\uFFFF where FFFF is the hexadecimal number of the character you are trying to match.

例: \u00E0 matches à

バックスラッシュを文字列リテラルとして使用する場合は、Java でバックスラッシュをエスケープする必要があることに注意してください。

詳しくはこちらをご覧ください。

于 2013-03-06T19:31:39.627 に答える
2

これを使用できます:

String[] names = name.split("[^a-zA-Z0-9'\\p{L}]+");

System.out.println(Arrays.toString(names));出力します:

[CEN01、Automação、Caso、Teste、Java]

詳細については、これを参照してください。

于 2013-03-06T19:41:41.080 に答える
1

区切り文字で分割しないのはなぜですか?

String[] names = name.split("[_.]");
于 2013-03-06T19:36:09.233 に答える
0

不要なすべての文字をブラックリストに登録する代わりに、次のように必要な文字を常にホワイトリストに登録できます。

^[^<>%$]*$

式 [^(ここには多くの文字)] は、リストされていない任意の文字に一致します。

しかし、それは個人的な意見です。

于 2013-03-06T19:40:17.543 に答える