2011-11-02 19 views
3

私は私のような別々の文字列内の個々の値を格納したいC#文字列操作正規表現または部分文字列?

string CCstring = "CC01=50 CC02=300 CC03=500 CC04=40"; 

あります

文字列操作は、私は正規表現またはサブストリングを使用する必要があります
for(int i = 0; i<=4; i++) 
{ 
    string suffix = i.ToString().PadLeft(2, '0'); 
    string CCindividual = CCindividual + i; 
    CCindividual = //THIS IS WHERE I WOULD LIKE TO GET MY INDIVIDUAL VALUES i.e 50,300,500,40; 
    Console.WriteLn("CC" + i + " =" + CCIndividual);//Testing 
} 

を。コードスニペットはどのように見えますか?

+4

古い中国の諺を使用します。問題と顔、プログラマは正規表現を使用することを決定される場合があります。プログラマは現在2つの問題があります。 – Jamiec

+0

@Jamiec:Jamie Zawinskiが中国人であることを知らなかった:-p(http://regex.info/blog/2006-09-15/247) –

+0

@ジョアヒム - funnily十分に私はちょっと知っていなかった*本当に*中国の諺。それはちょうど1つとして囲まれたより面白いです。 – Jamiec

答えて

3

一行:これはしかし、より効率的な方法である

string[] CCindividual = Regex.Split(CCstring, "CC[0-9]+=").Where(x => x != ""). 
    Select(x => x.Trim()).ToArray<String>(); 

わかりません。

+0

ありがとうございます。スニペット: 'string [] CCindividual = Regex.Split(tempComms、" CC [1-9] + = ");'は完全に機能しました。私はまた、未使用の入力に対してJSによって作成されるCCundefinedのような他の生成された要素も持っています。正規表現もそれを排除しました。ここに記載されている他の解決策は、それが実際にはあまりにも複雑になっていました。私はRegexが複雑な文字列操作を簡素化する美しい方法を持っていることを知っています。ちょうど1つを作ることができなかった。再度、感謝します。 – pl56

+0

編集されたバージョンも機能します。編集されたバージョンと元のバージョンとで何が違うのか、なぜそれが作られたのか説明できますか? – pl56

+0

@SameerShah: 'Regex.Split'と' Select(x => x.Trim())の後に得られる空の値を削除するために '.Where(x => x!=" ") (ここでスペースを表す '50_'、' 300_'、 '500_'と' 40'、 '_'を取得します)。 – Otiel

2

どちらもありません。あなたは配列を取得するためにstring.Splitを使用することができます。

string CCstring = "CC01=50 CC02=300 CC03=500 CC04=40"; 
string[] strings = CCstring.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); 

その後、あなたはstring.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);を使用して=のための同じをすることができます。

+0

これで、 '' CCXX = "'を削除する必要があります。 – Otiel

2

最初の分割をスペースで分割し、次に '='を使用できませんか? regexやsubstring imhoより簡単です。

1

非常に効率的にこのコードを実行する必要がある場合を除きます。あなたとあなたのチームにとって読みやすいものが心配になるはずです(時には部分文字列、分割など、時には正規表現です)。あなただけが本当に決めることができます。

0

あなたのCCstringを見ると、文字列の文字を1回だけ歩くことは間違いなく速くなります。確かにそれはあなたがそのような文字列のトンを持っているまで価値がありません。

だから、ちょうどstring.Splitを空白に1回、各フラグメントを '='で分割する方が簡単です。

1

だけのstring.Split

 string CCstring = "CC01=50 CC02=300 CC03=500 CC04=40"; 
     var result = CCstring.Split(' ') 
      .Select(s => s.Split('=')) 
      .ToDictionary(kv => kv[0], kv => Convert.ToInt64(kv[1])); 
関連する問題