Un'espressione regolare per \ b
-
12-09-2019 - |
Domanda
Le scrivo le espressioni regolari per il testo Unicode in Java. Tuttavia, per il particolare script che sto usando - Devanagari (0900 - 097F) c'è un problema con i confini di parola. \ B corrisponde ai caratteri che sono vocali dipendenti (come 093E-094C) in cui sono trattati come caratteri di spazio.
Esempio: Supponiamo che io ho la stringa: "कमल कमाल कम्हल कम्हाल" Si noti che 'मा' nel 2 ° parola è formata dalla combinazione di म e ा (riconosciuto come un carattere di spazio). Allo stesso modo l'ultima parola. Questo porta \ b per abbinare il 'ल' in 'कमाल' con espressione regolare \ b \ w \ b, che non è corretto in base alla lingua.
Spero che l'esempio aiuta.
Posso scrivere un'espressione regolare che si comporta come \ b eccezione del fatto che non corrisponde a certi caratteri? Qualsiasi commento sarà grato.
Soluzione
Si dovrebbe essere in grado di realizzare ciò che si vuole con i seguenti operatori regex:
(?=X) X, via zero-width positive lookahead
(?!X) X, via zero-width negative lookahead
(?<=X) X, via zero-width positive lookbehind
(?<!X) X, via zero-width negative lookbehind
(È possibile che questo è citato dal Java 6 documenti modello API .)
Usa (?<![foo])(?=[foo])
al posto di \b
prima di una parola, e (?<=[foo])(?![foo])
al posto di \b
dopo una parola, dove "[foo]
" è il set di caratteri "parola"
Altri suggerimenti
L'equivalente per i confini di parola (se i confini non quello che ti aspettavi per lo sono) potrebbe essere:
(?<!=[x-y])(<?=[x-y])...(?<=[x-y])(?![x-y])
Questo perché un "confine di parola" significa "un luogo in cui v'è un personaggio su un lato e non sull'altro)
Quindi, con look-dietro e look-ahead espressioni, si può definire la propria classe di caratteri [x-y] per controllare quando si vuole isolare un "confine di parola"