在字符串中查找整数,除了包含% c#的数字

本文关键字:包含 数字 字符串 查找 整数 | 更新日期: 2023-09-27 18:04:43

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

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

当前我正在使用:

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

在字符串中查找整数,除了包含% c#的数字

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

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

空白边界是这里的关键。这种类型的断言构造
在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

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

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

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

那么正则表达式就是^'w+

编辑:答案是不正确的,因为它只计算了开头的非单词。我认为正确的解决方案是使用'w'd+'w,它真正匹配所有唯一的数字子字符串。

答案不正确,但我认为我得到了匹配子字符串(具有空间边界)的点,其中没有单词字符。给出了更好的解决方案,例如c#的优雅解决方案和使用边界和向后看的regex解决方案。