2

"dentist: 800-483-9767"これ、これ、または数字、文字、その他の種類の文字を含むその他の組み合わせのような文字列が"john (232)233-2323"あり、最大 25 文字の長さであるとします。数字と文字を2つの文字列に抽出して、これを取得したい:

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

これをどうするのが一番いいですか?

ありがとう

4

4 に答える 4

4

Linqとを使用できますchar.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"
于 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"がjohn 2 232:233-2323名前で、残りは数字です。

解析したい場合、最初にやらなければならないことは、何らかの形式を識別することです。名前にスペースが含まれない場合は、 を呼び出しSplit(' ', 2)、最初のものを名前として取り、正規表現を使用して 2 番目のものから数字ではないものをすべて削除します。これまで C# で regexp を使用したことはありませんが、そうすべきだと思いますRegex.Replace(input, "[^\\d]+", "", RegexOptions.None)

于 2013-08-18T01:06:28.487 に答える