12

我收到了一些格式不正确的数据,需要从字符串中提取数字。我不确定最好的方法是什么。数字可以是任意长度。

string a = "557222]]>";
string b = "5100870<br>";

知道我能做什么,所以我会得到这个:

a = "557222"
b = "5100870"

谢谢

解决方案是针对 c# 抱歉。编辑问题以具有该标签

4

8 回答 8

31

您可以编写一个简单的方法来提取所有非数字字符,但这不会处理浮点数据:

public string ExtractNumber(string original)
{
     return new string(original.Where(c => Char.IsDigit(c)).ToArray());
}

这纯粹是提取“数字” - 您也可以使用Char.IsNumber而不是Char.IsDigit,具体取决于您希望的结果。

于 2012-06-12T18:27:28.563 回答
13

试试这个oneliner:

Regex.Replace(str, "[^0-9 _]", "");
于 2015-05-19T12:50:24.597 回答
8

对 .NET 不够熟悉,无法获得确切的代码。尽管如此,有两种方法是:

  • 将其转换为整数。如果非数字字符在末尾(即21389abc),这是最简单的。
  • 如果您混合了非数字字符(即1231a23v)并希望保留每个数字,请使用正则表达式[^\d]替换非数字字符。
于 2012-06-12T18:26:26.443 回答
7

您可以使用一个简单的正则表达式:

var numericPart = Regex.Match( a, "\\d+" ).Value;

如果您需要它是一个实际的数值,则可以使用int.Parseor int.TryParse

于 2012-06-12T18:32:36.960 回答
6

你可以使用 LINQ。下面的代码将字符串过滤为只有数字的 IEnumerable,然后将其转换为 char[]。然后字符串构造函数可以将 char[] 转换为字符串:

string a = "557222]]>";
string b = "5100870<br>";

a = new string(a.Where(x => char.IsDigit(x)).ToArray());
b = new string(b.Where(x => char.IsDigit(x)).ToArray());
于 2017-02-17T22:32:23.797 回答
4

试试这个

string number = Regex.Match("12345<br>", @"\d+").Value;

这将返回第一组数字。示例:对于输入"a 123 b 456 c",它将返回"123".

于 2012-06-12T18:33:01.700 回答
4

该问题没有明确说明您只想要字符 0 到 9,但是从您的示例集和评论中相信这是正确的并不是一件容易的事。所以这是执行此操作的代码。

        string digitsOnly = String.Empty;
        foreach (char c in s)
        {
            // Do not use IsDigit as it will include more than the characters 0 through to 9
            if (c >= '0' && c <= '9') digitsOnly += c;
        }

为什么不想使用 Char.IsDigit() - 数字包括分数、下标、上标、罗马数字、货币分子、带圆圈的数字和特定于脚本的数字等字符。

于 2015-01-18T18:35:53.273 回答
0

这是适用于我的案例的版本

    public static string ExtractNumbers(this string source)
    {
        if (String.IsNullOrWhiteSpace(source))
            return string.Empty;
        var number = Regex.Match(source, @"\d+");
        if (number != null)
            return number.Value;
        else
            return string.Empty;
    }
于 2018-05-02T08:10:35.660 回答