Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 从字符串中提取数字并生成双精度_Regex_String_C# 4.0 - Fatal编程技术网

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

Regex 从字符串中提取数字并生成双精度,regex,string,c#-4.0,Regex,String,C# 4.0,我有琴弦,我需要用它们做双打。它们的格式都是: "Blabla 11/moreBla 17-18" That should become 11.1718 "Blabla 7/moreBla 8-9" --> 7.89 "Blabla 4/moreBla 6-8" --> 4.68 等等 也可以有额外的空格,或者破折号可以是正斜杠。那么,诸如此类的事情: "Blabla 11/moreBla 17-18" "Blabla 11 / moreBla 17-18" "Blabla 11

我有琴弦,我需要用它们做双打。它们的格式都是:

"Blabla 11/moreBla 17-18"  That should become 11.1718
"Blabla 7/moreBla 8-9" --> 7.89
"Blabla 4/moreBla 6-8" --> 4.68
等等

也可以有额外的空格,或者破折号可以是正斜杠。那么,诸如此类的事情:

"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"
我试着先把绳子分开,但很明显还有其他的情况。所以斯普利特在这里工作不好。也许正则表达式会有所帮助?

试试这个

(\d+).+?(\d+).+?(\d+)
换成

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

c#代码是

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;
    }
}

你可以试试这样的东西

String data = "Blabla 11/moreBla 17-18";
data = Regex.Replace(DATA, "[a-zA-Z ]", "");

data = String.Concat(DATA.Split('/')[0], "." , Regex.Replace(DATA.Split('/')[1], "(?:[^a-z0-9 ]|(?<=['\"])s)",""));

double MyValue = Convert.ToDouble(data);
String data=“Blabla 11/moreBla 17-18”;
data=Regex.Replace(数据,“[a-zA-Z]”,“”);

data=String.Concat(data.Split(“/”)[0]、“”、Regex.Replace(data.Split(“/”)[1]、“(?:[^a-z0-9]|)(?基于您在问题中给出的测试用例:

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);
代码:

输出:

11.1718
11.1718
测试此代码


或此代码:

 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]);
     }
 }
输出:

11.1718
11.1718

测试此代码。

谢谢。替换示例就是我最后使用的示例。