2012-04-21 14 views

Odpowiedz

49

Ewentualnie dopasować a + lub - na początku, a następnie przez jeden lub więcej cyfr po przecinku, opcjonalnie następnie po przecinku dziesiętnym i jednym lub więcej cyfr po przecinku util koniec napisu:

/^[+-]?\d+(\.\d+)?$/ 

RegexPal

+1

nie powinny minus zaloguj się '[+ -]' escaped jak '[+ \ -]'? – jfriend00

+2

@ jfriend00 Nie, to nie musi być. Nie jest możliwe, aby był to zakres, ponieważ jest to ostatnia postać w klasie, więc jest to literalny znak minus. Po prostu spróbuj tego w konsoli: '/^[+ -]? \ D + (\. \ D +)? $ /. Test ('- 1')' – Paulpro

+1

Widzę, że to działa, ale dlaczego nie musi uciec? – jfriend00

3

prawo wyrażenie powinno być jak następuje:

[+-]?([0-9]*[.])?[0-9]+ 

ten stosuje się do:

+1 
+1. 
+.1 
+0.1 
1 
1. 
.1 
0.1 

Oto przykład Python:

import re 
#print if found 
print(bool(re.search(r'[+-]?([0-9]*[.])?[0-9]+', '1.0'))) 
#print result 
print(re.search(r'[+-]?([0-9]*[.])?[0-9]+', '1.0').group(0)) 

wyjściowa:

True 
1.0 

Jeśli używasz komputera Mac, możesz przetestować na linii poleceń:

python -c "import re; print(bool(re.search(r'[+-]?([0-9]*[.])?[0-9]+', '1.0')))" 

python -c "import re; print(re.search(r'[+-]?([0-9]*[.])?[0-9]+', '1.0').group(0))" 
+0

To jest lepsza odpowiedź, ponieważ mogę umieścić mezje jak 9,5 mm lub 9,5in itd. Dzięki za ten +1 –

+1

@ IvijanStefanStipić jesteś mile widziany – lbsweek

+0

Nie wydaje się obejmować następujące przypadki: 23..8789 lub 4587.387.987. Pomogło mi to: https://stackoverflow.com/a/30461355/1783439 –