2012-11-06 28 views
5

Ho un problema per definire un'espressione regolare che corrisponde ai numeri in virgola mobile ma NON identificare gli integer.Le espressioni regolari corrispondono al numero in virgola mobile ma non intero

Ho la seguente espressione regolare, che corrisponde ai numeri mobili.

(\+|-)?([0-9]+\.?[0-9]*|\.[0-9]+)([eE](\+|-)?[0-9]+)? 

Come posso modificare l'espressione sopra in modo che non corrisponda agli interi?

Ecco un esempio di ciò che dovrebbe essere abbinato:

3.3 
.3 
5E6 
.2e-14 
7E+3 
4. 
5.E2 
1e2 
+0

Si prega di confermare:... Solo '# .',' # # ',' # ',' # .E # ',' # # e # 'e '. # e #' devono essere abbinati? – sp00m

+0

Sì, questo è giusto .. – mrjasmin

+0

Vedere http://www.regular-expressions.info/floatingpoint.html –

risposta

9

Se il sapore regex supporta lookaheads, richiedono uno dei personaggi in virgola mobile entro la fine del numero:

((\+|-)?(?=\d*[.eE])([0-9]+\.?[0-9]*|\.[0-9]+)([eE](\+|-)?[0-9]+)? 

Additional reading.

Ecco anche una versione leggermente ottimizzata:

[+-]?(?=\d*[.eE])(?=\.?\d)\d*\.?\d*(?:[eE][+-]?\d+)? 

Iniziamo con un + o - opzionale. Quindi abbiamo bisogno di uno dei caratteri ., e o E dopo una quantità arbitraria di cifre. Quindi richiediamo almeno una cifra, prima o dopo la stringa. Abbiamo appena abbinato cifre, un . opzionale e più cifre. Quindi (completamente facoltativo) uno e o uno E e uno + o - facoltativo e quindi una o più cifre.

+0

Una versione regolare ed pulita senza jolly '(' all'inizio - ['[+ -]? (? = \ D * [. EE]) ([0-9] + .? \ [0-9] * |.?? \ [0-9] +) ([ee] [+ -] [0-9] +) '] (https://regex101.com/r/7xruwB/1) –

0

Questo dovrebbe soddisfare le vostre esigenze:

[+-]?([0-9]+\.([0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)? 
+0

Si deve corrispondere a '1e2'? –

+0

@MarkDickinson' 1e2' non corrisponde. '1.e2' e' .1e2' sarà comunque. – sp00m

+0

Sì, è per questo che ho chiesto. '1e2' è di solito un valido rappresentazione di un float, quindi mi aspetterei che l'OP vorrebbe che fosse abbinato, ma non è chiaro dalla domanda: suppongo che avrei dovuto postare il commento sopra sulla domanda piuttosto che sulla tua risposta. –

Problemi correlati