2012-03-15 49 views
0

私は非常に複雑な文字列を抽出する必要があります。文字列からの抽出

文字列 - !0A!0B!0C @[email protected]@0B

私は、各!ために読んで、3の意味!0A!0B!0Cのセットとしてそれらを抽出して、私はそれらのそれぞれとして、それらを読むことを選択した場合を使用することを計画していたいです何かを表す(ケースを選択するのでしょうか?良い)

そして、私は彼らは、トリックを行う必要があり3S

答えて

1

この方法でどのように展開します。文字列を送信すると、結果の一覧が表示されます。

public List<string> StringParser(string s){ 
    var list = new List<string>(); 
    for(int i = 0; i < s.Length; i++){ 
    if(s[i] == '!'){ 
     list.Add(s.Substring(i,3)); 
     i+= 2; 
    } 
    } 
    return list; 
} 

文字列に!が含まれていると、これは失敗します。おそらくsubstringコマンドを実行する前にこれを確認するためのテストを行うべきでしょう。

1

、あなたのコード内の多くの場所であなたは空想の拡張メソッドを作成することができることを行う必要がある場合:私は定期的に使用する

var parts = "!0A!0B!0C @[email protected]@0B".SplitInParts(3); 
3

static class StringExtensions { 
    public static IEnumerable<String> SplitInParts(this String s, Int32 partLength) { 
    if (s == null) 
     throw new ArgumentNullException("s"); 
    if (partLength <= 0) 
     throw new ArgumentException("Part length has to be positive.", "partLength"); 
    for (var i = 0; i < s.Length; i += partLength) 
     yield return s.Substring(i, Math.Min(partLength, s.Length - i)); 
    } 
} 

あなたは、このようにそれを使用することができます表現。たとえば、次のようになります。

Dim str As String = "!0A!0B!0C" 
    Dim ptr As String = "[!][A-Z0-9]{2}" 

    Dim matches As MatchCollection = Regex.Matches(str, ptr) 

    For Each m In matches 
     Console.WriteLine(m.ToString()) 
    Next 

申し訳ありませんが、この例はVBですが、そこから考えてください。