0

文字列があり、それらから double を作成する必要があります。それらはすべて次の形式です。

"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"

最初に文字列を分割しようとしましたが、明らかにこれらの他のすべてのケースがあります。そのため、ここでは分割がうまく機能していません。多分RegExが助けになるでしょうか?

4

4 に答える 4

2

質問で提供したテストケースに基づいて:

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);
于 2012-08-28T17:06:03.180 に答える
0

コード:

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]", "")); 
    }
}

出力:

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

このコードをここでテストします。

于 2012-08-28T17:06:18.500 に答える
0

これを試して

(\d+).+?(\d+).+?(\d+)

で置き換えます

\1.\2\3

基本的には、最初のグループの数字と一致し、それを整数部分に配置します。次に、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;
    }
}
于 2012-08-28T16:55:12.503 に答える
0

このようなことを試すことができます

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

これが役立つことを願っています。

于 2012-08-28T17:00:31.293 に答える