|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2001
Messaggi: 9538
|
[Regex] Prendere una qualunque sequenza di caratteri compresa tra due delimitatori
Ciao a tutti.
Avrei bisogno di una mano per la creazione di una espressione regolare. Ho una lista di stringhe tra cui devo riuscire a prendere una qualunque sequenza di caratteri compresa tra due caratteri delimitatori. Il seguente codice mostra un esempio eterogeneo di quello che mi ritrovo. Codice:
, 432/1 Sc. L - , 67 - , 350/2P. - , 60/. - , 56/2P Int. 4 - , 17/2 P - , 66/P/T Int. 4 - , 526/2 P - , 24 Int. 1 - Il problema è che ciò che è compreso tra i due delimitatori è scritto in modo eterogeneo. Io ci ho provato ma, probabilmente a causa della mia non approfondita conoscenza delle espressioni regolari, non ci sono riuscito. Ho ovviato scrivendo tante espressioni regolari per i vari casi possibili che si sono sono presentati analizzando il file, ma ciò penso sia lungo e controproducente. Questo è quanto ho fatto, ancora in fase di rifinitura. Codice:
[,]\\s*(\\w+|\\w+[/]\\w+|\\w+[/]\\w+[.]\\w+|\\w+[/]\\w+[/]\\w+)*\\s[\\-] Quello che mi chiedo e che è alla fine la domanda del thread : esiste un modo per prendere una qualunque sequenza di caratteri, compatibile con il set che mi ritrovo, compresa tra due delimitatori riuscendo a scrivere meno codice possibile? Grazie anticipatamente a chi avrà la pazienza di leggere e sarà in grado di aiutarmi. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2005
Messaggi: 1400
|
se ti interessa solo il contenuto testuale potrebbe bastare anche la seguente regex (nn testata)
,(.*)- |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Se ho capito bene forse andrebbe bene una cosa di questo tipo:
Codice:
(?<=,).*?(?=-) Con .*? selezioni qualunque carattere (grazie al punto), zero o più volte (grazie all'asterisco) e in modo lazy (grazie al ?). Con (?=-) matchi il trattino ma non lo catturi. Per lazy si intende che il match viene interrotto a favore dell'elemento successivo, in questo caso il trattino. Ad esempio , asd - , lol - in modo lazy catturi " asd ", in modo non lazy (o greedy) catturi " asd - , lol ". Ho usato come riferimento questo sito e in particolare: LINK LINK Ultima modifica di wingman87 : 30-06-2011 alle 15:07. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Aug 2001
Messaggi: 9538
|
Innanzitutto grazie ad entrambi per la risposta.
Subito dopo aver postato, sono andato a cercare delle informazioni ed avevo scritto per prova una regex così formata Codice:
[?<=\\,](\\d+)[?=\\-] Adesso provo con entrambi i suggerimenti. Grazie ancora. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Aug 2001
Messaggi: 9538
|
Bene, di funzionare funzionano entrambe.
Ora devo capire il problema per cui non viene matchato alcun campo se aggiungo quell'espressione regolare al resto che ho già creato. Almeno è un passo avanti e so per certo, grazie a voi, che quello funziona. Grazie ancora per l'aiuto. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:52.



















