假设我有一个类似于此"dentist: 800-483-9767"
或此"john (232)233-2323"
的字符串或其他具有数字,字母和其他类型字符的组合,且长度最多为25个字符。我想将数字和字母字符提取为2个字符串,以便我得到:
string digits = "8004839767";
string letters = "dentist";
最好的做法是什么?
由于
答案 0 :(得分:4)
您可以使用Linq
和char.IsDigit
,char.IsLetter
string input = "dentist: 800-483-9767";
string digits = new string(input.Where(char.IsDigit).ToArray());
string letters = new string(input.Where(char.IsLetter).ToArray());
结果:
input = "dentist: 800-483-9767";
digits = "8004839767"
letters = "dentist"
input = "john (232)233-2323";
digits = "2322332323"
letters = "john"
答案 1 :(得分:1)
如果它真的是关于获取数字和字母(并且没有在某处分割,匹配电话号码或某些类似的话),这将是我的尝试:
var input = "dentist: 0800-483-9767";
var digits = string.Join(string.Empty, input.Where(char.IsDigit));
var letters = string.Join(string.Empty, input.Where(char.IsLetter));
答案 2 :(得分:0)
string input = "dentist: 800-483-9767";
string[] split = input.Split(':');
string letters = split[0];
string digits = split[1].Replace("-","").Trim();
与juergen发布的内容类似,它会删除数字中的破折号。
答案 3 :(得分:0)
当说“看起来像”时,你应该更具体地说明什么可以改变,什么不可以改变。
如果格式始终为:,则可以执行
Data process(String input)
{
var elements = input.Split(new char[] {':'});
Data result;
result.letters = elements[0].Trim();
result.digits = elements[1].Trim().Replace("-", "");
return result;
}
那是完全我正在谈论的那种纯洁。
如果您确定这些字母不包含数字,则可以使用正则表达式将字母与其余字母分开。如果您确定这些字母不包含空格,您可以Split(' ')
。我的意思是,它可能是john 2 232:233-2323
,其中“john 2”是名称,其余的是数字。
如果你想解析它,你要做的第一件事就是确定某种格式。
如果名称不包含空格,则只需调用Split(' ', 2)
,取第一个作为名称,并使用正则表达式从第二个删除所有不是数字的数字。我以前从未在C#中使用过regexp,但我认为它应该是Regex.Replace(input, "[^\\d]+", "", RegexOptions.None)
。