Sto cercando di mettere un'espressione regolare Java per dividere le stringhe del formato generale "foo - bar" in "foo" e "bar" con Pattern.split(). Il carattere "-" può essere uno dei tanti trattini: l'ASCII '-', il trattino lungo, l'en-dash, ecc ho costruito il seguente espressione regolare:Corrispondenza dei trattini Unicode nelle espressioni regolari Java?
private static final Pattern titleSegmentSeparator = Pattern.compile("\\s(\\x45|\\u8211|\\u8212|\\u8213|\\u8214)\\s");
che, se io Sto leggendo correttamente la documentazione Pattern, dovrei catturare qualsiasi trattino Unicode o il trattino ASCII, quando circondato da entrambi i lati da spazi bianchi. Sto usando il modello come segue:
String[] sectionSegments = titleSegmentSeparator.split(sectionTitle);
Nessuna gioia. Per l'input di esempio riportato di seguito, il trattino non viene rilevato e titleSegmentSeparator.matcher (sectionTitle) .find() restituisce false!
Per assicurarsi che non mancasse alcuna entità di carattere insolita, ho utilizzato System.out per stampare alcune informazioni di debug. L'output è il seguente: ogni carattere è seguito dall'output di (int) char, che dovrebbe essere il suo 'code point unicode, no?
ingressoEsempio:
Study Sintesi (1 di 10) - Competizione
S (83) t (116) u (117) d (100) y (121) (32) S (83) u (117) m (109) m (109) a (97) r (114) y (121) (32) ((40) 1 (49) (32) o (111) f (102) (32) 1 (49) 0 (48)) (41) (32) - (8211) (32) C (67) o (111) m (109) p (112) e (101) t (116) i (105) t (116) i (105) o (111) n (110)
mi sembra che il trattino sia codepoint 8211, che dovrebbe essere abbinato alla regex, ma non lo è! Cosa sta succedendo qui?
Dalla documentazione: "le corde '\ u2014' e '\\ u2014', anche se non uguale, compilare nello stesso modello, che corrisponde al personaggio con 0x2014 valore esadecimale. " Cioè, puoi rimuovere il doppio \\ nella tua espressione. – aioobe
@aioobe: Che enorme coincidenza che i documenti di Java hanno usato esattamente un carattere come un esempio che questa domanda è circa. O hai modificato la citazione? Coincidenza –
:-) – aioobe