2

假设我有一个看起来像 this"dentist: 800-483-9767"或 this"john (232)233-2323"或其他包含数字、字母和其他类型字符的组合的字符串,并且最多 25 个字符长。我想将数字和字母字符提取到 2 个字符串中,以便得到:

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

最好的方法是什么?

谢谢

4

4 回答 4

4

您可以使用Linqchar.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"
于 2013-08-18T01:08:13.897 回答
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));
于 2013-08-18T01:08:53.837 回答
0
    string input = "dentist: 800-483-9767";

    string[] split = input.Split(':');

    string letters = split[0];

    string digits = split[1].Replace("-","").Trim();

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

于 2013-08-18T01:05:29.543 回答
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# 中使用过正则表达式,但我认为应该是Regex.Replace(input, "[^\\d]+", "", RegexOptions.None).

于 2013-08-18T01:06:28.487 回答