字符串解析,提取数字和字母

解析字符串并提取数字和字母的最简单方法是什么? 我的字符串可以是以下格式(数字|字母或字母|数字),即“10A”,“B5”,“C10”,“1G”等。

我需要提取2个部分,即“10A” – >“10”和“A”。

更新:感谢大家提供的所有优秀答案

最简单的方法可能是使用正则表达式。

((?\d+)(?[a-zA-Z])|(?[a-zA-Z])(?\d+)) 

然后,您可以将其与字符串匹配,并从组中提取值。

 Match match = regex.Match("10A"); string letter = match.Groups["letter"].Value; int number = int.Parse(match.Groups["number"].Value); 

最简单,最快捷的是使用简单的字符串操作。 使用IsDigit方法检查字母的位置,并将字符串的其余部分解析为数字:

 char letter = str[0]; int index = 1; if (Char.IsDigit(letter)) { letter = str[str.Length - 1]; index = 0; } int number = int.Parse(str.Substring(index, str.Length - 1)); 
 char letter = str.Single(c => char.IsLetter(c)); int num = int.Parse(new string(str.Where(c => char.IsDigit(c)).ToArray())); 

这个解决方案并不是非常严格(它会允许像“5A2”这样的东西并返回’A’和52),但它可能适合你的目的。

只是为了与众不同:

 string number = input.Trim("ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray()); string letter = input.Trim("0123456789".ToCharArray()); 

我将如何处理这个问题。 您可以逐步执行此操作并在监视窗口中放置gc1 [“letter”],gc1 [“number”],gc2 [“letter”]和gc2 [“number”]以查看它是否有效(步骤刚刚过去)这里的代码行当然)。

常规epxression将采用任何一种模式,在每种情况下需要一个或多个字母和数字。

  Regex pattern = new Regex("^(?[a-zA-Z]+)(?[0-9]+)|(?[0-9]+)(?[a-zA-Z]+)$"); string s1 = "12A"; string s2 = "B45"; Match m1 = pattern.Match(s1); Match m2 = pattern.Match(s2); GroupCollection gc1 = m1.Groups; GroupCollection gc2 = m2.Groups; 

使用Sprache和一些Linq kung-fu:

 var tagParser = from a in Parse.Number.Or(Parse.Letter.Once().Text()) from b in Parse.Letter.Once().Text().Or(Parse.Number) select char.IsDigit(a[0]) ? new{Number=a, Letter=b} : new{Number=b, Letter=a}; var tag1 = tagParser.Parse("10A"); var tag2 = tagParser.Parse("A10"); tag1.Letter; // should be A tag1.Number; // should be 10 tag2.Letter; // should be A tag2.Number; // should be 10 /* Output: A 10 A 10 */