1

我有以下类型的字符串列表:

27 公里
56.1公里
45公里
96.2公里
87 千

我想得到每一个的数值。正如您所看到的,其中一些是浮点值,有时会输入错误的后缀“km”。我正在寻找的输出如下:

27
56.1
45
96.2
87

我在网上找到了将字符串转换为数字的正则表达式,但他们不认为某些值可以是浮点数,我该如何编写函数或找到满足我要求的表达式?

4

6 回答 6

4

不需要正则表达式,只需使用floatval

$float = floatval($string);
于 2012-04-19T16:30:13.750 回答
3

$var = floatval($float);就是你要找的。

于 2012-04-19T16:48:46.110 回答
2

只有parseFloat()他们。parseFloat()将以数字开头的字符串转换为数字并以第一个非数字字符结尾。

parseFloat('96.2 km')=96.2

于 2012-04-19T16:30:04.520 回答
0

尝试这个。为我工作

try {    
    Regex regexObj = new Regex(@"\b\d+(?:\.\d{0,}|)");    
    Match matchResults = regexObj.Match(subjectString);    
  while (matchResults.Success) {    
        // matched text: matchResults.Value    
        // match start: matchResults.Index    
        // match length: matchResults.Length    
        matchResults = matchResults.NextMatch();    
    }     
} catch (ArgumentException ex) {    
    // Syntax error in the regular expression    
}

php方式

preg_match_all('/\b\d+(?:\.\d{0,}|)/', $subject, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {
    # Matched text = $result[0][$i];
}
于 2012-04-19T16:32:50.617 回答
0

对于这些字符串,您可以使用/^\d+(\.\d+)?/

于 2012-04-19T16:29:20.460 回答
0

浮点正则表达式:[-+]?[0-9]*\.?[0-9]+

于 2012-04-19T16:29:43.407 回答