我拿到了一些格式很差的数据,需要从字符串中抽取数字。我不确定最好的方法是什么。这些数字可以是任意长度。
string a = "557222]]>";
string b = "5100870<br>";
有什么办法可以让我得到这个吗:
a = "557222"
b = "5100870"
谢谢
解决方案适用于C#,抱歉。我已编辑问题以包含该标签。
你可以编写一个简单的方法来提取所有非数字字符,但这无法处理浮点数据:
public string ExtractNumber(string original)
{
return new string(original.Where(c => Char.IsDigit(c)).ToArray());
}
这个方法只会提取“数字” - 根据您想要的结果,您也可以使用Char.IsNumber而不是Char.IsDigit。
public static string ExtractNumber(string original) => new string(original.Where(char.IsDigit).ToArray());
:) - Patrick尝试这个单行命令:
Regex.Replace(str, "[^0-9 _]", "");
对于.NET的代码不够熟悉。然而,有两种方法:
21389abc
),则这是最简单的方法。1231a23v
)并且想保留每个数字,请使用正则表达式[^\d]
替换非数字字符。Regex.split(str, "[^\d]")
,然后使用 string.join("", Regex.split(...))
函数。 - Ryan您可以使用一个简单的正则表达式:
var numericPart = Regex.Match( a, "\\d+" ).Value;
如果您需要它成为实际的数值,您可以使用int.Parse
或int.TryParse
。
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());
试试这个
string number = Regex.Match("12345<br>", @"\d+").Value;
这将返回第一组数字。例如:对于输入"a 123 b 456 c"
,它将返回"123"
。
这个问题并没有明确说明你只想要字符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()函数——因为数字包括分数、下标、上标、罗马数字、货币分子、环绕数字和特定脚本的数字等字符。
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;
}