首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从字符串中提取数字并生成双精度值

从字符串中提取数字并生成双精度值
EN

Stack Overflow用户
提问于 2012-08-29 00:41:41
回答 4查看 56关注 0票数 0

我有线,我需要用它们做替身。它们的格式都是:

代码语言:javascript
复制
"Blabla 11/moreBla 17-18"  That should become 11.1718
"Blabla 7/moreBla 8-9" --> 7.89
"Blabla 4/moreBla 6-8" --> 4.68

等。

也可以有额外的空格或破折号,也可以是正斜杠。所以,任何类似的东西:

代码语言:javascript
复制
"Blabla 11/moreBla 17-18"
"Blabla 11 / moreBla 17-18"
"Blabla 11/moreBla 17/18"
"Blabla 11/moreBla 17 / 18"
"Blabla 11 / moreBla 17 / 18"

我首先尝试了拆分字符串,但显然还有其他所有的情况。因此,split在这里不能很好地工作。也许RegEx能帮上忙?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-29 01:06:19

代码:

代码语言:javascript
复制
using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string input = "Blabla 11/moreBla 17-18";
        string[] s = input.Split('/');
        Console.WriteLine(Regex.Replace(s[0], @"[^\d]", "") + "." + Regex.Replace(s[1], @"[^\d]", "")); 
    }
}

输出:

代码语言:javascript
复制
11.1718

测试这段代码here

或者这段代码:

代码语言:javascript
复制
 using System;
 using System.Text.RegularExpressions;

 class Program
 {
     static void Main()
     {
         string input = "Blabla 11/moreBla 17-18";
         string[] s = Regex.Replace(input, @"[^\d\/]", "").Split('/');
         Console.WriteLine(s[0] + "." + s[1]);
     }
 }

输出:

代码语言:javascript
复制
11.1718

测试这段代码here

票数 0
EN

Stack Overflow用户

发布于 2012-08-29 01:06:03

根据您在问题中给出的测试用例:

代码语言:javascript
复制
string input = @"Blabla 11/moreBla 17/18";

MatchCollection matches = Regex.Matches(input, "(\\d+)");
double val = Convert.ToDouble(matches[0].Value + "." + matches[1].Value + matches[2].Value);
票数 2
EN

Stack Overflow用户

发布于 2012-08-29 00:55:13

尝尝这个

代码语言:javascript
复制
(\d+).+?(\d+).+?(\d+)

将其替换为

代码语言:javascript
复制
\1.\2\3

基本上,它匹配第一组数字并将其放入整数部分,然后匹配第二组和第三组数字,无论它们之间是什么,并生成小数部分。

c#代码应该是

代码语言:javascript
复制
public double MatchNumber(string input){
    Regex r = new Regex(@"(\d+).+?(\d+).+?(\d+)");
    Match match = r.Match(input);
    if (match.Success){
        return Convert.toDouble(
             match.Groups[1].Value+"."+
             match.Groups[2].Value+
             match.Groups[2].Value);
    }
    else{
        return null;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12163810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档