Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
14/08/10 21:52
I)eathBringer
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...
aaa
15/08/10 3:22
pierotofy
Puoi fare una lista di esempi che dovrebbero essere identificati e un'altra di esempi che dovrebbero essere scartati?
Il mio blog: piero.dev
15/08/10 11:33
netarrow
Devi specificare i caratteri di inizio e fine riga così:

^-?\d+(,\d+)?$
aaa
15/08/10 14:43
I)eathBringer
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
aaa
15/08/10 15:41
netarrow
La regex che ti ho passato l'ho testata ( su 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 15/08/10 15:47
aaa
15/08/10 16:05
I)eathBringer
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!
aaa
15/08/10 16:10
netarrow
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 $
aaa
15/08/10 16:20
I)eathBringer
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
aaa