"dentist: 800-483-9767"
これ、これ、または数字、文字、その他の種類の文字を含むその他の組み合わせのような文字列が"john (232)233-2323"
あり、最大 25 文字の長さであるとします。数字と文字を2つの文字列に抽出して、これを取得したい:
string digits = "8004839767";
string letters = "dentist";
これをどうするのが一番いいですか?
ありがとう
"dentist: 800-483-9767"
これ、これ、または数字、文字、その他の種類の文字を含むその他の組み合わせのような文字列が"john (232)233-2323"
あり、最大 25 文字の長さであるとします。数字と文字を2つの文字列に抽出して、これを取得したい:
string digits = "8004839767";
string letters = "dentist";
これをどうするのが一番いいですか?
ありがとう
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"
それが本当に数字と文字を取得することである場合(どこかで分割したり、電話番号を一致させたりすることはありません)、これは私の試みです:
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();
ただし、juergen 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"がjohn 2 232:233-2323
名前で、残りは数字です。
解析したい場合、最初にやらなければならないことは、何らかの形式を識別することです。名前にスペースが含まれない場合は、 を呼び出しSplit(' ', 2)
、最初のものを名前として取り、正規表現を使用して 2 番目のものから数字ではないものをすべて削除します。これまで C# で regexp を使用したことはありませんが、そうすべきだと思いますRegex.Replace(input, "[^\\d]+", "", RegexOptions.None)
。