[英]How to Extract Data From a String Into Two Arrays
我有包含两个数据集的字符串,分别称为1和2。 在数据字符串中,每个字符都用符号@
或&
分隔,例如:
@ data1&data2 @ data1&data2 @ ....
我想将其提取为一个数组,例如x[] = all the data1
, y[] = data2
我尝试了strtok
方法,但是在处理了字符串之后,该方法给了我一个像这样的反向字符串:
“ abcd”成为d
c
b
a
的数组
这对我的情况不起作用,因为我需要按照找到它的顺序将它分成两个数组。
我不知道您的data1
, data2
等中到底存储了什么,但是似乎您需要使用字符串的Split()
方法。
string input = "@data1&data2@data1&data2@";
string[] splitInput = input.Split({'@', '&'});
splitInput
每个元素splitInput
将包含您的一个数据块。
假设您的数据格式不变
string input = "@data1&data2@data3&data4";
var keyValues = input.Split(new[] { '@'}, StringSplitOptions.RemoveEmptyEntries) // split to ["data1&data2", "data3&data4"]
.Select(i => i.Split('&')) // split to [ ["data1", "data2"], ["data3" , "data4"] ]
.Select(k => new KeyValuePair<string, string>(k[0], k[1]));
var x = keyValues.Select(s => s.Key); // x array
var y = keyValues.Select(s => s.Value); // y array
正则表达式允许人们根据“ reg-ex”语言中的模式进行分析和提取。
例如,要创建图案,请遵循以下步骤。
@
和一个文字字符&
。 因此,初始模式包含@ &
。 ( )
。 所以现在我们的模式看起来像@()&()
。 \\w+
。 也就是说,我们正在寻找一个可以用\\w
表示的单词类型字符(aZ和0-9)。 由于我们要查找1个或多个字符,因此我们在\\w
添加+
使其成为\\w+
。 现在我们的模式看起来像这样@(\\w+)&(\\w+)
Match
实例。 string data = "@data1&something1@data2&something2";
string pattern = @"@(\w+)&(\w+)";
// The C# literal character `@` must precede the string holding regex pattern.
var matches = Regex.Matches(data, pattern)
.OfType<Match>()
.Select(mt => new { X = mt.Groups[1].Value, Y = mt.Groups[2].Value })
.ToList();
// See what the data looks like in `matches`
var XArray = matches.Select(item => item.X).ToList();
// See what the data looks like in "XArray"
var YArray = matches.Select(item => item.Y).ToList();
// See what the data looks like in "YArray"
要了解更多信息,请参阅
即使文档是针对Visual Studio 2010的,它仍然可以使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.