正则表达式忽略数字符号

时间:2015-05-22 08:32:25

标签: regex

我正在学习正则表达式,我试图抓住一个浮点数。我想丢弃第一个浮点数前后的所有字符。 目前我有这个表达:

[\s\w]*([-+]{0,1}\d*[,.]{0,1}\d*)

以下是我喜欢匹配的情况(带有X的行是尼特工作)

'1,2'    ->  1,2   
'abc1,2' ->  1,2  
'   1,2' ->  1,2  
'  +1,2' -> +1,2  
'  -1,2' -> -1,2  
' --1,2' -> -1,2  X  
' +-1,2' -> -1,2  X  
' -+1,2' -> +1,2  X  
'    ,2' ->   ,2
'     1' ->  1 

如何忽略数字前面的第二个符号?

3 个答案:

答案 0 :(得分:0)

使用[-+]*匹配任意数量的符号字符,而不仅仅是1.如果您不希望它们出现在结果中,则它们不应位于捕获组中。

[\s\w]*[-+]*(\d*[,.]{0,1}\d*)

答案 1 :(得分:0)

如果您只需要提取十进制数字(包括相对整数),则无需描述数字前后发生的情况。所以这应该足够了:

[+-]?\d+(?:[.,]\d+)?

注意:此模式不处理.22.等情况,但很容易通过替换更改此内容(写[+-]?\d*[.+]?\d*确实不可能因为它允许空字符串或单个符号或单个点)

[+-]?(?:\d+(?:[.,]\d*)?|[.,]\d+)

答案 2 :(得分:0)

尝试

(?:\w\s)*([+-]?(?:\d+[,.]?\d*|[,.]?\d+))
相关问题