将数字和alpha提取为两个字符串

本文关键字:两个 字符串 数字 alpha 提取 | 更新日期: 2023-09-27 18:28:15

假设我有一个字符串,它看起来像这个"dentist: 800-483-9767"或这个"john (232)233-2323",或者其他组合,它有数字、字母和其他类型的字符,最大长度为25个字符。我想把数字和字母字符提取成2个字符串,这样我就可以得到:

string digits = "8004839767";
string letters = "dentist";

做这件事最好的办法是什么?

感谢

将数字和alpha提取为两个字符串

您可以使用Linqchar.IsDigitchar.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"

如果真的是关于获取数字和字母(而不是在某个地方拆分、匹配电话号码或类似的东西),这将是我的尝试:

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));
    string input = "dentist: 800-483-9767";
    string[] split = input.Split(':');
    string letters = split[0];
    string digits = split[1].Replace("-","").Trim();

然而,与于尔根d发布的内容类似,它将删除数字中的破折号。

当说"看起来像"时,应该更具体地说明什么可以改变,什么不能改变。

如果格式总是:,你可以做

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吗,其中"约翰2"是名字,其余的是数字。

如果你想解析它,你必须做的第一件事就是识别某种格式。如果名称不包含空格,那么只需调用Split(' ', 2),将第一个名称作为名称,并使用正则表达式从第二个名称中删除所有非数字的内容。我以前从未在C#中使用过regexp,但我认为它应该是Regex.Replace(input, "[^''d]+", "", RegexOptions.None)