我有像这样的字符串
AS_!SD 2453iur ks@d9304-52kasd
我需要得到字符串的 2 个前数:
对于这种情况将是:
2453
和9304
我在字符串中没有任何分隔符来尝试拆分,并且数字和字符串的长度是可变的,我在 WPF 中的 C# 框架 4.0 中工作。
谢谢你的帮助,对不起我的英语不好
此解决方案将采用两个前数字,每个数字可以有任意数量的数字
string s = "AS_!SD 2453iur ks@d9304-52kasd";
MatchCollection matches = Regex.Matches(s, @"\d+");
string[] result = matches.Cast<Match>()
.Take(2)
.Select(match => match.Value)
.ToArray();
Console.WriteLine( string.Join(Environment.NewLine, result) );
将打印
2453
9304
您可以将它们解析int[]
为result.Select(int.Parse).ToArray();
您可以循环解析字符串的字符,如果遇到异常,那就是字母,如果不是数字,则必须有一个列表来添加这两个数字,并有一个计数器来限制这一点。
遵循伪代码:
for char in string:
if counter == 2:
stop loop
if parse gets exception
continue
else
loop again in samestring stating this point
if parse gets exception
stop loop
else add char to list
或者,您可以使用 ASCII 编码:
string value = "AS_!SD 2453iur ks@d9304-52kasd";
byte zero = 48; // 0
byte nine = 57; // 9
byte[] asciiBytes = Encoding.ASCII.GetBytes(value);
byte[] asciiNumbers = asciiBytes.Where(b => b >= zero && b <= nine)
.ToArray();
char[] numbers = Encoding.ASCII.GetChars(asciiNumbers);
// OR
string numbersString = Encoding.ASCII.GetString(asciiNumbers);
//First two number from char array
int aNum = Convert.ToInt32(numbers[0]);
int bNum = Convert.ToInt32(numbers[1]);
//First two number from string
string aString = numbersString.Substring(0,2);