2012-02-29 19 views
5

Ho questo modello:Espressione regolare Java per numeri negativi?

Pattern.compile("T([0-9]*)");

che funziona bene per i numeri positivi, ma ho bisogno di fare anche i numeri negativi, per esempio "T-1T3T44" dovrebbe funzionare. O forse usa lo spazio invece di "T", quindi dovrebbe funzionare per stringhe come questa: "- 1 2 3 2 -1 6 2". Scusa, non ho mai usato espressioni regolari prima. Qualche suggerimento? Grazie.

+0

http://regexlib.com/DisplayPatterns.aspx?cattabindex=2&categoryId=3 – vulkanino

+0

Spiacente ho modificato la mia risposta per lo spazio invece di T. – Fofole

risposta

5

hai pensato a provare:

"T(-?[0-9]+)" 

Noterete Ho anche cambiato il "*" (zero o più) per "+" (uno o più) in quanto "" non è tecnicamente un numero: -)

+1

Questo non è del tutto corretto, in quanto consente: -0. Zero non può essere negativo. Per vedere come affrontarlo, vedi la mia risposta. – Lukasz

+0

@Figlie: sì, basta sostituirlo con uno spazio nella regex, senza problemi. Lukasz, sì, se vuoi impedire lo zero negativo, avrai bisogno di qualcosa di più complesso. Personalmente, penso che si stia avvicinando alla fase di ritenzione anale ma vedo il tuo punto di vista :-) – paxdiablo

+0

Grazie. Questo è più facile da capire e non ho davvero bisogno di controllare -0 perché costruisco la stringa correttamente, quindi contrassegno questa come risposta accettata. Spero che tutti siano felici di questo. – Fofole

1
Pattern.compile("T-?([0-9]*)"); 
3

Prova con:

Pattern.compile("T(-?[0-9]*)"); 
1

M potrebbe essere il meno facoltativo?

T - ([0-9] *)

9
Pattern.compile("T(-{0,1}(?!0)\\d+)"); 

Si prega di notare l'utilizzo di negativo look-ahead (?!0) per escludere -0 numero e numeri che iniziano con 0.

Problemi correlati