2016-07-14 95 views
1

我有这个字符串[lat:50.000],我需要得到多少出来,但有时它可能在它的前面一个连字符,因为它可能是一个负数的比赛数量。正则表达式,连字符和不

我已经得到了这个正则表达式[\-]\d+(\.\d{1,10})?但是它只会匹配数字,如果它在前面有连字符,我需要一个正则表达式,它会匹配和不使用连字符。所以我会留下50.000或在某些情况下-2.000

希望这是有道理的。

回答

1

使用这个表达式:\-?\d+\.\d{1,10}

+1

连字符甚至不需要转义。 –

2

你需要一个量词声明,连字号是可选:

[\-]?\d+(\.\d{1,10})? 

您也可以提高表达了一下,把连字符出来的字符类的(因为它只是一个字符):

-?\d+(\.\d{1,10})? 
+0

无需字符类,但是。它可能只是' - ?' – 4castle

+0

是的;我试图不打扰原始正则表达式,所以我添加了另一个版本。 –

1

一个question mark quantifier?下一个字符或一组将表明塔t是可选的:

-?\d+(\.\d{1,10})? 

这相当于使用了{0,1}量词。

+0

完美谢谢:) –

+0

您也可以从连字符去掉逃逸。 –

+0

谢谢,这是删除OP的原始字符组的结果,但忽略了逃脱。 –

0

下面是一个简单的表达式

\-?\d*\.?\d* 
1

又一之一:

(-?\d[\d.,]+) 
# - or not (optional) 
# followed by at least a digit 
# followed by digits, dots and commas 

参见a demo on regex101.com