2013-03-06 14 views
12

sto usando questa espressione regolare:String spaccato, parole tra cui i caratteri accentati

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

Ciò restituisce un array di stringhe con lettere e/o numeri.

Se io uso questo:

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

ho ottenuto:

CEN01 
Automated 
TestCase 
Java 

Ma se io uso questo:

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

ho ottenuto:

CEN01 
Automa 
o 
Caso 
Teste 
Java 

Come posso modificare questa espressione regolare per includere caratteri accentati? (á, ã, õ, ecc ...)

+1

Se Java supporta le proprietà unicode '[^ \ p {L}]' sarebbe abbastanza robusto. Non so se lo fa però ... – Wrikken

+1

@Wrikken: Funziona. Java 7 supporta anche '\ w' e' \ b' in modo sensato Unicode. –

+0

Bello, ero solo pigro per cercarlo, ma debitamente notato;) – Wrikken

risposta

9

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

Categorie che si comportano come i java.lang.Character boolean ismethodname metodi (ad eccezione di quelle deprecate) sono disponibili attraverso lo stesso \p{prop} sintassi in cui la proprietà specificata ha il nome javamethodname.

Dal Character classe contiene isAlphabetic metodo è possibile utilizzare

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

È anche possibile utilizzare

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

ma sarà necessario utilizzare UNICODE_CHARACTER_CLASS bandiera che può essere utilizzato con l'aggiunta di (?U) in regex .

+1

Uomo, questo è bellissimo * - *. Mi ha anche aiutato. Grazie! – Jvam

+0

Felice che ti piaccia. Puoi trovare molte informazioni utili in [Pattern documentation] (http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html :) :) – Pshemo

2

Vorrei controllare il Java Documentation on Regular Expressions. C'è una sezione unicode che credo sia ciò che stai cercando.

EDIT: Esempio

Un altro modo sarebbe quello di abbinare il codice di carattere che si sta cercando. Per esempio

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

Esempio: \u00E0 matches à

rendo conto che il backslash dovrà essere sfuggito in Java, se lo si utilizza come una stringa letterale.

Maggiori informazioni al riguardo here.

+0

Probabilmente hai ragione, ma il mio voto è per quello che presenta qui un esempio funzionante. –

+1

Vedere la risposta aggiornata. –

1

Perché non suddividere i caratteri separatori?

String[] names = name.split("[_.]"); 
+0

Grazie! Mi ha aiutato a venire con una soluzione! – Jvam

0

Invece di lista nera tutti i personaggi che non si desidera, si può sempre whitlist i caratteri desiderati come:

^[^<>%$]*$ 

L'espressione [^ (molti personaggi qui)] solo corrisponde a qualsiasi carattere che non è elencati.

Ma questa è un'opinione personale.

2

È possibile utilizzare questo:

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

System.out.println(Arrays.toString(names)); uscita sarà:

[CEN01, Automação, Caso, Teste, java]

Vedi this per ulteriori informazioni.

Problemi correlati