繁体   English   中英

如何从一个字符串到两个数组中提取数据

[英]How to Extract Data From a String Into Two Arrays

我有包含两个数据集的字符串,分别称为1和2。 在数据字符串中,每个字符都用符号@&分隔,例如:

@ data1&data2 @ data1&data2 @ ....

我想将其提取为一个数组,例如x[] = all the data1y[] = data2

我尝试了strtok方法,但是在处理了字符串之后,该方法给了我一个像这样的反向字符串:

“ abcd”成为d c b a的数组

这对我的情况不起作用,因为我需要按照找到它的顺序将它分成两个数组。

我不知道您的data1data2等中到底存储了什么,但是似乎您需要使用字符串的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”语言中的模式进行分析和提取。


例如,要创建图案,请遵循以下步骤。

  1. 众所周知,有一个文字字符@和一个文字字符& 因此,初始模式包含@ &
  2. 然后,我们需要匹配并捕获要放在X和Y之后的文本。通过在正则表达式中指定匹配捕获集( ) 所以现在我们的模式看起来像@()&()
  3. 要匹配任何文本,可以说\\w+ 也就是说,我们正在寻找一个可以用\\w表示的单词类型字符(aZ和0-9)。 由于我们要查找1个或多个字符,因此我们在\\w添加+使其成为\\w+ 现在我们的模式看起来像这样@(\\w+)&(\\w+)
  4. 使用该模式,我们期望从正则表达式解析器返回两组数据,这将返回两个Match实例。
  5. 现在我们从匹配集中提取数据。
  6. 使用X和Y这两组数据,我们将创建单独的数组。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM