Извлечение из строки - PullRequest
0 голосов
/ 15 марта 2012

У меня есть довольно сложная строка, из которой мне нужно извлечь.

Строка - !0A!0B!0C @0A@0B@0B

Я хотел бы прочитать для каждого ! и извлечь их как набор из 3, что означает !0A, !0B, !0C, а затем я планирую использовать выбранный регистр, чтобы прочитать их как каждый представлять что-то (Будет ли дело хорошо?)

А как мне их извлечь в 3с

Ответы [ 3 ]

3 голосов
/ 15 марта 2012

Я бы использовал регулярное выражение. Например, как это:

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, но вы поняли идею.

1 голос
/ 15 марта 2012

Если вам нужно сделать это во многих местах вашего кода, вы можете создать необычный метод расширения:

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));
  }
}

Затем вы можете использовать его следующим образом:

var parts = "!0A!0B!0C @0A@0B@0B".SplitInParts(3);
1 голос
/ 15 марта 2012

Этот метод должен помочь. Отправьте свою строку, и появится список результатов:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...