Ho un albero di analisi che include alcune informazioni. Per estrarre le informazioni di cui ho bisogno, sto usando un codice che divide la stringa in base alla barra (/
), ma questo non è un codice perfetto. Spiego più dettagli qui:Espressione regolare da dividere con barra diretta
Avevo usato questo codice in un altro progetto in precedenza e questo ha funzionato perfettamente. Ma ora gli alberi di analisi del mio nuovo set di dati sono più complicati e il codice a volte prende decisioni sbagliate.
Il parse albero è qualcosa di simile:
(TOP~did~1~1 (S~did~2~2 (NPB~I~1~1 I/PRP) (VP~did~3~1 did/VBD not/RB (VP~read~2~1 read/VB (NPB~article~2~2 the/DT article/NN ./PUNC.)))))
Come si vede, le foglie dell'albero sono le parole a destra prima del slash. Per ottenere queste parole, ho usato questo codice prima:
parse_tree.split("/");
Ma ora, nei miei nuovi dati, vedo casi come questi:
1) (TOP Source/NN http://www.alwatan.com.sa/daily/2007-01-31/first_page/first_page01.htm/X ./.)
dove ci sono più tagli dovuti agli indirizzi dei siti Web (in questo caso, solo l'ultima barra è il separatore della parola).
2) (NPB~sister~2~2 Your/PRP$ sister/NN //PUNC:)
Quando la barra è una parola stessa.
Potresti per favore aiutarmi a sostituire la mia attuale espressione regolare con un'espressione che può gestire questi casi?
Per riassumere ciò di cui ho bisogno, direi che ho bisogno di un'espressione regolare che può essere suddivisa in base alla barra, ma deve essere in grado di gestire due eccezioni: 1) se c'è un indirizzo del sito web, deve essere diviso basato sull'ultima barra. 2) Se ci sono due barre consecutive, deve dividere in base al secondo split (e la prima barra NON deve essere considerata come un separatore, è una WORD).
Potrebbe cercare di chiarire la tua domanda ? Vuoi dividere per "/" a meno che non ci sia un indirizzo Web? – Praeterii
È possibile scegliere quale simbolo separatore utilizzare nella rappresentazione dell'albero di analisi? potrebbe essere più facile/più gestibile da usare ad es. '§' invece di'/'. – collapsar
@Praeterii Grazie mille per la risposta. Ho aggiunto un sommario alla mia domanda che chiarisce ciò di cui ho bisogno. – user1419243