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.

È stato utile?

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"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top