我有一个非常复杂的字符串,我需要从中提取。
字符串 - !0A!0B!0C @0A@0B@0B
我想为每个!
阅读并将其提取为3个含义!0A
,!0B
,!0C
,然后我打算使用select如果他们每个人都代表什么就会阅读它们(会选择案例会好吗?)
如何在3s中提取它们
答案 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);