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

kev*_*evp 10 .net c# regex string

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

string a = "557222]]>";
string b = "5100870<br>";
Run Code Online (Sandbox Code Playgroud)

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

a = "557222"
b = "5100870"
Run Code Online (Sandbox Code Playgroud)

谢谢

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

Ree*_*sey 31

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

public string ExtractNumber(string original)
{
     return new string(original.Where(c => Char.IsDigit(c)).ToArray());
}
Run Code Online (Sandbox Code Playgroud)

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


小智 12

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


Jas*_*ary 8

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

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

  • +1正则表达式.使用C#,您可以使用类似`Regex.split(str,"[^\d]")`并使用`string.join("",Regex.split(...))`函数. (3认同)
  • 而不是分裂/连接混乱,更简单的解决方案是:新的正则表达式(@"\ D").替换(源??"",""); (2认同)

Eth*_*own 7

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

var numericPart = Regex.Match( a, "\\d+" ).Value;
Run Code Online (Sandbox Code Playgroud)

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


小智 5

您可以使用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());
Run Code Online (Sandbox Code Playgroud)