正規表現はやり過ぎだと思います。また、コードを書くのに少し時間がかかります(正規表現を知っているので、今から学ぶ必要があると思います)。
文字列を英数字の文字列で区切る最も簡単な方法は何ですか?常にLLLLDDDDDになります。私は文字(l)だけが欲しいのですが、通常は1文字か2文字だけです。
正規表現はやり過ぎだと思います。また、コードを書くのに少し時間がかかります(正規表現を知っているので、今から学ぶ必要があると思います)。
文字列を英数字の文字列で区切る最も簡単な方法は何ですか?常にLLLLDDDDDになります。私は文字(l)だけが欲しいのですが、通常は1文字か2文字だけです。
string result = input.TrimEnd(new char[]{'0','1','2','3','4','5','6','7','8','9'});
// I'm sure using LINQ and Range can simplify that.
// also note that a string like "abc123def456" would result in "abc123def"
しかし、正規表現も単純です。
string result = Regex.Match(input,@"^[^\d]+").Value;
私はMichael Stumの正規表現の答えを好みますが、LINQのアプローチもあります:
string input = "ABCD1234";
string result = new string(input.TakeWhile(c => Char.IsLetter(c)).ToArray());
数字に一致する正規表現を使用して、数字を削除できます。
input = Regex.Replace(input, "\d+$", String.Empty);
昔ながらのループも悪くありません。実際には最速の解決策になるはずです。
int len = input.Length;
while (input[len-1] >= '0' && input[len-1] <= '9') len--;
input = input.Substring(0, len);
彼らはそれを手に入れました - 良い解決策は not 演算子を使用して問題の説明を採用していることに注意してください: 「数字ではありません」は、先頭に数字がある場合は、通過するためにグループのキャプチャと呼ばれるものが必要であるという私の限られた利益から思われます。文字列のフロントエンドにあるものは何でも。私が現在使用している設計パラダイムは、区切り文字の後に区切り文字が続き、その後に左中括弧が続くというものではありません。
その結果、結果セットに含まれていない区切り文字が必要になります。たとえば、0x0019 / 0x0018 などの data-delimitersl の十分に確立された ascii 値である可能性があります。