从字符串中提取

时间:2012-03-15 06:45:33

标签: c# parsing

我有一个非常复杂的字符串,我需要从中提取。

字符串 - !0A!0B!0C @0A@0B@0B

我想为每个!阅读并将其提取为3个含义!0A!0B!0C,然后我打算使用select如果他们每个人都代表什么就会阅读它们(会选择案例会好吗?)

如何在3s中提取它们

3 个答案:

答案 0 :(得分:3)

我会使用正则表达式。例如:

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 :(得分: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命令之前执行测试以验证这一点。

答案 2 :(得分:1)

如果您必须在代码中的许多地方执行此操作,您可以创建一个花哨的扩展方法:

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