Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - problema regex
Forum - C# / VB.NET - problema regex

Avatar
I)eathBringer (Normal User)
Pro


Messaggi: 127
Iscritto: 11/08/2008

Segnala al moderatore
Postato alle 23:52
Sabato, 14/08/2010
Questo topic è stato chiuso dal moderatore

Ho creato un pattern per identificare dei numeri decimali (positivi o negativi) ma, anche se il valore analizzato non è composto da sole cifre, l'analisi ha sempre successo (a meno che non sia formato da soli non numerici): "-?\d+(,\d+)?"
Spero che qualcuno mi possa aiutare perchè io non so veramente dove andare a sbattere la testa a questo punto...

PM
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 5:22
Domenica, 15/08/2010
Puoi fare una lista di esempi che dovrebbero essere identificati e un'altra di esempi che dovrebbero essere scartati?


Il mio blog: https://piero.dev
PM
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 13:33
Domenica, 15/08/2010
Devi specificare i caratteri di inizio e fine riga così:

^-?\d+(,\d+)?$

PM
Avatar
I)eathBringer (Normal User)
Pro


Messaggi: 127
Iscritto: 11/08/2008

Segnala al moderatore
Postato alle 16:43
Domenica, 15/08/2010
Alcuni esempi:
42 corretto
8,73 corretto
-2 corretto
-23,1 corretto
5a errato
42cs,5 errato
-2b3 errato

Ho provato con "^-?\d+(,\d+)?$" ma in questo caso addirittura mi ritorna sempre che sono errati :d

PM
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 17:41
Domenica, 15/08/2010
La regex che ti ho passato l'ho testata ( su http://gskinner.com/RegExr/ )

Se non ti funziona devi verificare di passare una stringa trimmata (usa Trim() di String), quindi senza spazi davanti e dietro e devi abilitare il multiriga.

Puoi farlo passando dei parametri alle classi per gestire le regex di .net o direttamente nella regex così:

(?m)^-?\d+(,\d+)?$

Questo vale se tu vuoi verificare che un input rispetti questo pattern.

Se devi invece cercare dentro un testo più grande tutti i punti che lo rispettano chiaramente l'inizio e fine riga non contano più, e dovresti fornirci magari il testo di origina da cui vuoi estrarre i numeri.

rettifica: il multilinea potresti anche non usarlo effettivamente, visto che se quello che devi fare è il check di un input sarà su una linea unica.

Ultima modifica effettuata da netarrow il 15/08/2010 alle 17:47
PM
Avatar
I)eathBringer (Normal User)
Pro


Messaggi: 127
Iscritto: 11/08/2008

Segnala al moderatore
Postato alle 18:05
Domenica, 15/08/2010
Funziona! Cavolo non potete immaginare quanto sono idiota... probabilmente funzionava anche prima ma per una svista avevo inserito il pattern come parametro di una funzione che avevo creato per la sostituzione dei caratteri riconosciuti da una regex come metacaratteri in modo che venissero esaminati come caratteri veri e propri (ad esempio se una stringa contiene un punto "." questo viene sostituito da "\.")... e poi per forza non andava! Ringrazio tutti per l'interessamento e vi chiedo scusa per il tempo che vi avrò fatto perdere... Grazie ancora!

PM
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 18:10
Domenica, 15/08/2010
Prima non poteva funzionare cmq per questo motivo:

se tu accetti come pattern questo:

-?\d+(,\d+)?

e una stringa contiene ad esempio

a5,2b

è cmq valida, perchè contiene quel pattern.

Per dirgli che la stringa, dall'inizio alla fine, deve essere esattamente quel pattern allora devi usare ^ e $

PM
Avatar
I)eathBringer (Normal User)
Pro


Messaggi: 127
Iscritto: 11/08/2008

Segnala al moderatore
Postato alle 18:20
Domenica, 15/08/2010
Si ma infatti in quel modo funziona, è solo che non ho capito come diavolo ho fatto ad infilare quel pattern nelal funzione O_O vabbè, comunque sembrerebbe che ho risolto... Grazie a tutti

PM