Problemi con Regular Expression

martedì 08 maggio 2012 - 11.58

celedrummer Profilo | Newbie

Buongiorno a tutti,
mi chiamo Adriano e spero di postare nella sezione giusta!
la mi aproblematica riguarda le Regular Expression che utilizzo sia direttamente in WPF che in dll utilizzate da altri applicativi.

Vi espongo il mio problema da newbie.

Date le seguenti due stringhe:
"ENERGIA ELETTRICA ATTIVA CORRISPETTIVO ENERGIA PER FORNITURE CON POTENZA IMPEGNATA OLTRE 3 SINO A 6"
e
"ENERGIA ELETTRICA ATTIVA CORRISPETTIVO ENERGIA PER FORNITURE CON POTENZA IMPEGNATA OLTRE 3 SINO A 6 KW (A4)"

mi interessa trovare una RegExp che mi prenda la prima scartando la seconda: ovvero deve far matchare ciascuna descrittiva che NON riporti in fondo (tra tonde) un codice del tipo 'A4' o altri tipo 'A2'.

Sapete aiutarmi? .....
Grazie mille!

aiedail92 Profilo | Expert

Ciao,

Per fare quello che ti serve devi utilizzare il cosiddetto "negative lookahead". La regex da usare è la seguente:

@"^(?!.*\(A[24]\)$).*$" // Stringa stile C#

In pratica la regex all'interno di "(?! )" viene matchata, e se il match ha successo la regex fallisce. In questo modo scartiamo tutte le stringhe che finiscono con "(A2)" o "(A4)" (aggiungi gli altri codici se ce ne sono).

Luca

celedrummer Profilo | Newbie

Grazie mille Luca, mi hai finalmente indicato la strda da prendere!!

Però se voglio prendere solo le stringe che cominciano con "Energia elettrica attiva", devo cambiare sia il PATTERN dell'asserzione sia il pezzo che viene dopo?

Perchè se scrivo così la regex:
^(?!.*\(A[24]\)$)\w*\s*[^r,e]Attiva\s*Corrispettivo\s*\w*\s*Energia\s*\w*$


NON mi prende, come invece mi aspetterei, la stringa:
"ENERGIA ELETTRICA ATTIVA CORRISPETTIVO ENERGIA PER FORNITURE CON POTENZA IMPEGNATA OLTRE 3 SINO A 6"

Come mai? In fondo alla stringa non è presente alcun codice del tipo A2, A3, MCT ecc....
Grazie ancora!

aiedail92 Profilo | Expert

Se vuoi che la stringa inizi con "Energia Elettrica Attiva", basta specificare il match all'inizio:

^Energia\s*Elettrica\s*Attiva(?!.*\(A[24]\)$).*$

Se vuoi che contenga anche altre parole, le inserisci nell'ordine:

^Energia\s*Elettrica\s*Attiva.*Corrispettivo.*Energia(?!.*\(A[24]\)$).*$

Luca

celedrummer Profilo | Newbie

Caro Luca,
se passi da Verona una sera ti offro una pizza, sei stato gentilissimo!!!
grazie!

aiedail92 Profilo | Expert

Figurati!

Luca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5