我收到了一些格式不正确的数据,需要从字符串中提取数字。我不确定最好的办法是什么。数字可以是任意长度。
string a = "557222]]>";
string b = "5100870<br>";
任何想法我能做什么所以我会得到这个:
a = "557222"
b = "5100870"
由于
解决方案是针对c#抱歉。编辑了问题以获得该标记
答案 0 :(得分:31)
您可以编写一个简单的方法来提取所有非数字字符,但这不会处理浮点数据:
public string ExtractNumber(string original)
{
return new string(original.Where(c => Char.IsDigit(c)).ToArray());
}
这完全取出了“数字” - 您也可以使用Char.IsNumber代替Char.IsDigit,具体取决于您希望的结果。
答案 1 :(得分:12)
试试这个oneliner: Regex.Replace(str,“[^ 0-9 _]”,“”);
答案 2 :(得分:8)
对于确切的代码,不熟悉.NET。尽管如此,有两种方法:
21389abc
),这是最简单的。1231a23v
)并希望保留每个数字,请使用正则表达式[^\d]
替换非数字字符。答案 3 :(得分:7)
您可以使用简单的正则表达式:
var numericPart = Regex.Match( a, "\\d+" ).Value;
如果您需要它是实际数值,则可以使用int.Parse
或int.TryParse
。
答案 4 :(得分: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());
答案 5 :(得分: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() - 数字包括分数,下标,上标,罗马数字,货币分子,环绕数字和特定于脚本的数字等字符。
答案 6 :(得分:3)
试试这个
string number = Regex.Match("12345<br>", @"\d+").Value;
这将返回第一组数字。示例:对于输入"a 123 b 456 c"
,它将返回"123"
。
答案 7 :(得分: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;
}