【问题标题】:Find integer numbers in string except numbers include % c# [closed]在字符串中查找整数,除了数字包括% c# [关闭]
【发布时间】:2015-07-25 18:47:01
【问题描述】:

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

示例: 价格 3500 美元和折扣 34% 我只需要提取3500。

目前我正在使用:

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

但它不会只提取 3500。

【问题讨论】:

  • 请提供您解决此问题的尝试并显示更详细的数据。
  • 你能提供更多关于确切的字符串结构的信息吗?如果它是每行等?你只需要数字还是“美元”等?如果您只想要数字,您实际上可以按空格分隔并提取所有非小数的数字。
  • @Bauss 没有任何已知的字符串结构,它只包含一个数字和一个十进制数,我只需要一个整数..
  • 它们是否都存储在一个字符串中,并且是否保证每个数字之间都有空格? “文本 558181 文本 9491 1499 14919 文本”还是像“文本 38113 9391 文本 193291 文本”?
  • 你在说什么decimal number

标签: c# regex string digit


【解决方案1】:

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

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

【讨论】:

  • 优雅的 C# 解决方案。
  • 对于它的价值,这个答案的有效性取决于标准“在包含一个整数和一个百分比数字的字符串中查找整数”的解释——因为所需的行为是未定义的当没有百分比数字时。也就是说,OP的意思是“可能包括”还是“必须包括”?话虽如此,我同意,这是一个非常优雅的解决方案。 :-)
【解决方案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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      所以正则表达式是^\w+。看http://www.regexr.com/3bfdc

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

      答案不正确,但我认为我的意思是匹配没有单词字符的子字符串(具有空格边界)。给出了更好的解决方案,例如优雅的 C# 解决方案和使用边界、前瞻和后视的正则表达式的另一种解决方案。

      【讨论】:

        猜你喜欢
        • 2022-01-21
        • 1970-01-01
        • 1970-01-01
        • 2017-06-29
        • 2016-04-06
        • 2012-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多