查找字符串中的整数,但数字包括%c#

时间:2015-07-25 18:47:02

标签: c# regex string digit

我需要在字符串中找到包含一个整数和一个百分比数的整数。

实施例: 价格3500美元,折扣34% 我只需要提取3500。

目前我正在使用:

Regex.Match("price 3500 USD and discount 34%" , @"\d+");

但它不仅仅提取3500。

4 个答案:

答案 0 :(得分:4)

你不需要正则表达式。一个简单的Linq就足够了

var numbers = inputstr.Split().Where(x => x.All(char.IsDigit)).ToArray();

答案 1 :(得分:2)

空白边界是关键。这种断言构成了 BOS和EOS上的比赛也是如此。

您可以在空白边界上找到整数,如下所示 -

 # @"(?<!\S)\d+(?!\S)"

 (?<! \S )             # Whitespace boundary
 \d+ 
 (?! \S )              # Whitespace boundary

您可以在空白边界上找到整数或十进制数字,如下所示 -

 # @"(?<!\S)(?:\d+(?:\.\d*)?|\.\d+)(?!\S)"

 (?<! \S )             # Whitespace boundary
 (?:                   # Integer or decimal number
      \d+ 
      (?: \. \d* )?
   |  \. \d+ 
 )
 (?! \S )              # Whitespace boundary

答案 2 :(得分:1)

既然你说所有的数字都是空格分开的,你就可以这样做。

public static List<int> GetNumbers(string str)
{
    List<int> numbers = new List<int>();
    foreach (data; str.Split(' '))
    {
        int value;
        if (int.TryParse(data, out value))
            numbers.Add(value);
    }
    return numbers;
}

传递的字符串(str)是包含数字的字符串。

此外,如果您想获得小数,可以使用double.TryParse()

答案 3 :(得分:1)

我想一个解决方案是寻找没有单词字符的子串。

因此正则表达式为^\w+。查看http://www.regexr.com/3bfdc

编辑:答案不正确,因为它只与非单词混合。我认为正确的解决方案是使用\w\d+\w,它真正匹配所有唯一的数字子串。看到它正常工作here

答案不正确,但我认为我有点匹配没有单词字符的子串(有空格边界)。给出了更好的解决方案,例如C#的优雅解决方案和另一个使用边界,外观和外观的正则表达式。