从字符串中提取数字以创建仅数字字符串

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

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

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

 a = "557222" b = "5100870" 

谢谢

解决方案是c#抱歉。 编辑了问题以获得该标记

对于确切的代码,不熟悉.NET。 尽管如此,有两种方法:

  • 将其转换为整数。 如果非数字字符在最后(即21389abc ),这是最简单的。
  • 如果您混合了非数字字符(即1231a23v )并希望保留每个数字,请使用正则表达式[^\d]替换非数字字符。

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

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

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

试试这个oneliner:Regex.Replace(str,“[^ 0-9 _]”,“”);

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

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

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

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

 string a = "557222]]>"; string b = "5100870
"; a = new string(a.Where(x => char.IsDigit(x)).ToArray()); b = new string(b.Where(x => char.IsDigit(x)).ToArray());

问题没有明确说明你只想要字符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() - 数字包括分数,下标,上标,罗马数字,货币分子,环绕数字和脚本特定数字等字符。

试试这个

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

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

这是适合我案例的版本

  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; }