我正在学习正则表达式,我试图抓住一个浮点数。我想丢弃第一个浮点数前后的所有字符。 目前我有这个表达:
[\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
如何忽略数字前面的第二个符号?
答案 0 :(得分:0)
使用[-+]*
匹配任意数量的符号字符,而不仅仅是1.如果您不希望它们出现在结果中,则它们不应位于捕获组中。
[\s\w]*[-+]*(\d*[,.]{0,1}\d*)
答案 1 :(得分:0)
如果您只需要提取十进制数字(包括相对整数),则无需描述数字前后发生的情况。所以这应该足够了:
[+-]?\d+(?:[.,]\d+)?
注意:此模式不处理.2
或2.
等情况,但很容易通过替换更改此内容(写[+-]?\d*[.+]?\d*
确实不可能因为它允许空字符串或单个符号或单个点):
[+-]?(?:\d+(?:[.,]\d*)?|[.,]\d+)
答案 2 :(得分:0)
尝试
(?:\w\s)*([+-]?(?:\d+[,.]?\d*|[,.]?\d+))