2016-07-20 8 views
-2

抽出文字列 - 私はこのような何かをしたいすべてのオカレンス

私の文字列例: "何か; 123:somethingelse; 156:somethingelse2; 589:somethingelse3" 私は希望

文字列の例から抽出された値を持つ配列を取得します。これらの値は、 ";"そして「:」:123、156、589

私はこれを試してみましたが、私はすべてのオカレンスを取得するために反復処理する方法がわからない:

string str = stringExample.Split(';', ':')[1]; 
string[i] arr = str; 

は私を助けてくれてありがとう。

+0

'Split'は、* *の配列を返します。必要に応じてループすることができます。 'foreach(stringExample.Split( ';'、 ':'))の文字列item {...}' –

+0

問題は、分割した後にインデックスを指定してしまうことです。 '[1]'を削除すると、 'str'は' string [] 'になります –

答えて

0

ですから、あなたがこのアプローチを使用することができ、すべての3つの数字を抽出したい:

string stringExample = "something;123:somethingelse;156:somethingelse2;589:somethingelse3"; 
string[] allTokens = stringExample.Split(';', ':'); // remove [1] since you want the whole array 
string[] allNumbers = allTokens.Where(str => str.All(Char.IsDigit)).ToArray(); 

結果は次のとおりです。

allNumbers {string[3]} string[] 
      [0] "123" string 
      [1] "156" string 
      [2] "589" string 
2

LINQは、このような何かをするだろう、ここではあなたの友達です:

str.Split(';').Select(s => s.Split(':')[0]).Skip(1) 
1

このような正規表現を使用できます。

Regex r = new Regex(@";(\d+):"); 
string s = "something;123:somethingelse;156:somethingelse2;589:somethingelse3"; 
foreach(Match m in r.Matches(s)) 
    Console.WriteLine(m.Groups[1]); 
;(\d+):

はbrackest内のコンテンツを選択;:Groups[1]の間に立って1桁以上の数字、数字をERGOと一致します。

出力:

123 
156 
589 

配列の使用にこれらの文字列を取得するには:

string[] numberStrings = r.Matches(s).OfType<Match>() 
          .Select(m => m.Groups[1].Value) 
          .ToArray(); 
0

これは、正規表現のための完全なケースのように聞こえます。

var sample = "something;123:somethingelse;156:somethingelse2;589:somethingelse3"; 
    var regex = new Regex(@"(?<=;)(\d+)(?=:)"); 
    var matches = regex.Matches(sample); 

    var array = matches.Cast<Match>().Select(m => m.Value).ToArray(); 
1

私は名前付きグループで動作します:

string stringExample = "something;123:somethingelse;156:somethingelse2;589:somethingelse3"; 
Regex r = new Regex(";(?<digit>[0-9]+):"); 
foreach (Match item in r.Matches(stringExample)) 
{ 
    var digit = item.Groups["digit"].Value; 
} 
関連する問題