2

次のように、最初の部分が文字列で最後の部分が数字である文字列があります。

ahde7394

だから私が取得したいのは:

アヘデ

7394

最初に文字列を抽出し、次に文字の最後の位置から文字列の最後までの数値を取得することを考えたので、インデクサーを使用して何らかの方法で実行できると思います:

var stringQuery = NameComp.Select((str,index) => new {myStr=str, position=index})
                                               .Where(c => !Char.IsDigit(c.myStr)).Select((ch,pos) => new { newStr=ch, pos=pos} );

それから私はすることができます:

1) 文字列を取得するには: stringQuery.newStr

2) 番号を取得するには: stringQuery.Skip(stringQuery.pos).Select(d => d);

stringQuery を取得した後、匿名型であるため、そのアイテムにアクセスできません....

何か案は?

str="ahde7394" と推測するLINQ を使用したソリューション:

string letters = new string(str.TakeWhile(c => Char.IsLetter(c)).ToArray());

および番号の場合:

string number = new string(str.Skip(letters.Length).TakeWhile(c => Char.IsDigit(c)).ToArray());

または、最後の部分が数字であると推測することをお勧めします。

   string number = str.Substring(name.Length);
4

3 に答える 3

5

LINQ はおそらく適切なソリューションではないという dtb に同意します。

正規表現は、文字列が指定したよりもはるかに可変である可能性があると仮定して、別のオプションです。

var str = "ahde7394";

var regex = Regex.Match(str, @"([a-zA-Z]+)(\d+)");

var letters = regex.Groups[1].Value; // ahde
var numbers = regex.Groups[2].Value; // 7394
于 2013-09-29T09:49:14.423 に答える
1

あなたは使用することができString.IndexOfますString.Substring

string s = "ahde7394";
int index = 0;
foreach (var i in s)
{
     if(Char.IsDigit(i))
     {
        index = s.IndexOf(i);
        break;
     }
}

Console.WriteLine(s.Substring(0, index));
Console.WriteLine(s.Substring(index));

出力は次のようになります。

ahde
7394

ここにDEMO.

于 2013-09-29T09:50:37.113 に答える
1

ここでは、LINQ が最適なソリューションではない可能性があります。String.IndexOfAny Methodを見てください:

char[] digits = new[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };

string input = "ahde7394";

int index = input.IndexOfAny(digits);

string head = input.Substring(0, index);  // "ahde"
string tail = input.Substring(index);     // "7394"
于 2013-09-29T09:46:45.537 に答える