代码之家  ›  专栏  ›  技术社区  ›  Kenzo_Gilead

从粘有字符的字符串中获取数字

  •  0
  • Kenzo_Gilead  · 技术社区  · 6 年前

    我需要把每一个数字都粘在一起

    例如,从以下字符串:

    string test = "number1+3"
    string test1 = "number 1+4"
    

    我该怎么做?

    代码

     string test= "number1+3";
     List<int> res; 
    
     string[] digits= Regex.Split(test, @"\D+");
     foreach (string value in digits)
     {
         int number;
         if (int.TryParse(value, out number))
         {
             res.Add(number)
         }
     }
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   vc 74    6 年前

    string pattern = @"\d+";
    string test = "number1+3";
    
    foreach (Match match in Regex.Matches(test, pattern))
       Console.WriteLine("Found '{0}' at position {1}", 
                         match.Value, match.Index);
    

    请注意,如果您打算多次使用它,出于性能原因,创建Regex实例比使用此静态方法更好。

    var res = new List<int>();
    
    var regex = new Regex(@"\d+");
    
    void addMatches(string text) {
        foreach (Match match in regex.Matches(text))
        {
            int number = int.Parse(match.Value);
            res.Add(number);
        }
    }
    
    string test = "number1+3";
    addMatches(test);
    
    string test1 = "number 1+4";
    addMatches(test1);
    

    MSDN link .

    Fiddle 1

    Fiddle 2

        2
  •  1
  •   Patrick Hofman Wahid Bitar    6 年前

    这需要正则表达式:

    (\d+)\+(\d+)
    

    Test it

    Match m = Regex.Match(input, @"(\d+)\+(\d+)");
    
    string first = m.Groups[1].Captures[0].Value;
    string second = m.Groups[2].Captures[0].Value;
    
        3
  •  1
  •   Rui Jarimba    6 年前

    正则表达式的替代方法:

    string test = "number 1+4";
    
    int[] numbers = test.Replace("number", string.Empty, StringComparison.InvariantCultureIgnoreCase)
                        .Trim()
                        .Split("+", StringSplitOptions.RemoveEmptyEntries)
                        .Select(x => Convert.ToInt32(x))
                        .ToArray();