如果所有的字段都是固定宽度的,而你只关心第一个整数,那么这很容易;只需使用string.Substring 提取您关心的部分,然后解析它。
以下是提取和解析的方法(注意我使用int.TryParse - 您正在解析可能损坏的字符串):
private bool TryExtractFirstNumber(string input, out int result)
{
var resultString = input.Substring(2, 9);
return int.TryParse(resultString, out result);
}
你可以这样称呼:
var inputs = new[]
{
"TM000013452S20548",
"PB000013452S3DVSF",
};
foreach (var inp in inputs)
{
if (TryExtractFirstNumber(inp, out var result))
{
Debug.WriteLine(result);
}
}
输出是:
13452
13452
如果你描述的“非数字字符”的位置不知道,那就去寻找吧:
private int FindIndexOfFirstNonNumeric(string toScan, int startIndex = 0)
{
for (var index = startIndex; index < toScan.Length; ++index)
{
if (!char.IsNumber(toScan[index]))
{
return index;
}
}
return toScan.Length;
}
然后修改TryExtractFirstNumber函数进行查找:
private bool TryExtractFirstNumber(string input, out int result)
{
var length = FindIndexOfFirstNonNumeric(input, 2) - 2;
var resultString = input.Substring(2, length);
return int.TryParse(resultString, out result);
}
它给出了相同的结果。