2012-03-27 10 views
1

どうしたのですか?私は2つのグループを設定する()を持っており、sExtractNumberは "0.234"と ""の値を持つグループを作成することを期待していますが、どちらも.Value = "0.234"ですか?C#でRegEx.Matchを使って式を分割する方法

const string REGEX_NUMBER = "[0-9\\.-]*"; 
static readonly Regex sExtractNumber = new 
    Regex(string.Format("^({0})(.*)$", REGEX_NUMBER), 
    RegexOptions.Singleline | RegexOptions.Compiled); 

-

[Test] public void ParseNumber() 
{ 
    double num; 
    string rest; 
    Assert.True(KbParser.ExtractNumber("0.234", out num, out rest)); 
    Assert.AreEqual(0.234, num, 0.0001); 
    Assert.AreEqual(rest, "in"); // fails . Rest == "0.234" 

    Assert.True(KbParser.ExtractNumber("0.234in", out num, out rest)); 
    Assert.AreEqual(0.234, num, 0.0001); 
    Assert.AreEqual(rest, "in"); 
} 

-

public static bool ExtractNumber(string name, out double number, out string rest) 
{ 
    Match m = sExtractNumber.Match(name); 
    string numbertext = m.Groups[0].Value; 
    rest = m.Groups[1].Value; 
    return double.TryParse(numbertext, out number); 
} 

答えて

2

Groups[0]は常にマッチしたテキストが含まれています。最初に捕捉されたグループはGroups[1]です。したがって、ExtractNumberの方法は、

public static bool ExtractNumber(string name, out double number, out string rest) 
{ 
    Match m = sExtractNumber.Match(name); 
    string numbertext = m.Groups[1].Value; 
    rest = m.Groups[2].Value; 
    return double.TryParse(numbertext, out number); 
} 
+0

とする必要があります。 –

関連する問題