我有一个包含数组的字符串
string str = "array[0]=[1,a,3,4,asdf54,6];array[1]=[1aaa,2,4,k=6,2,8];array[2]=[...]";
我想把它拆分成这样的数组:
str[0] = "[1,a,3,4,asdf54,6]";
str[1] = "[1aaa,2,4,k=6,2,8]";
str[2] = ....
我尝试使用Regex.Split(str, @"\[\D+\]")
,但它没有用。
有什么建议吗?
由于
SOLUTION:
看过你的答案后我用了
var arr = Regex.Split(str, @"\];array\[[\d, -]+\]=\[");
这很好用,谢谢大家!
答案 0 :(得分:3)
var t = str.Split(';').Select(s => s.Split(new char[]{'='}, 2)).Select(s => s.Last()).ToArray();
答案 1 :(得分:2)
在正则表达式中,\d
匹配任何数字,而\D
匹配不数字的任何数字。我假设你使用后者是错误的。此外,您应该允许正则表达式使用字符类[\d\-, ]
来匹配否定符号,逗号和空格。您还可以为=
字符添加 lookahead lookbehind,写为(?<=\=)
,以避免获得[0]
,[1]
,{ {1}},...
[2]
答案 2 :(得分:1)
试试这个 - 使用正则表达式查看后面的内容以获取字符串的相关部分。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace RegexSplit
{
class Program
{
static void Main(string[] args)
{
string str = "array[0]=[1,2,3,4,5,6];array[1]=[1,2,4,6,2,8];array[2]=[...]";
Regex r = new Regex(@"(?<=\]=)(\[.+?\])");
string[] results = r.Matches(str).Cast<Match>().Select(p => p.Groups[1].Value).ToArray();
}
}
}
BONUS - 如果您喜欢,请转换为int[][]
。
int[][] ints = results.Select(p => p.Split(new [] {'[', ',', ']'}, StringSplitOptions.RemoveEmptyEntries)
.Where(s => { int temp; return int.TryParse(s, out temp);}) //omits the '...' match from your sample. potentially you could change the regex pattern to only catch digits but that isnt what you wanted (i dont think)
.Select(s => int.Parse(s)).ToArray()).ToArray();
答案 3 :(得分:0)
正则表达式是一种选择,但它会有点复杂。假设您没有输入解析器,可以尝试以下操作:
- 按;
字符拆分字符串,你会得到一个字符串数组(例如string[]
):
“array [0] = [1,2,3,4,5,6]”,“array [1] = [1,2,4,6,2,8]”,“array [2] = [。 ..]”。我们称之为list
。
然后对于该数组中的每个元素(假设输入是有序的),执行以下操作:
- 找到]=
的索引,让它为x
。
- 从起始索引x + 2
中获取整个字符串的子字符串。我们称之为sub
。
- 将结果字符串分配为数组中的当前字符串,例如如果您使用常规for
循环进行迭代,并且索引变量为i
,例如for(int i = 0; i < len; i++){...}
:
list[i] = sub
。
我知道这是一个肮脏且容易出错的解决方案,例如:如果输入为array[0] =[1,2...
而不是array[0]=[1,2,...
,则由于其中的额外空间而无法正常工作,但如果您的输入会计算完全模式(没有额外的空格,没有换行符等) ),它会完成这项工作。
更新: cosset的答案似乎是实现结果的最实用,最简单的方法,特别是如果您熟悉LINQ。
答案 4 :(得分:0)
string[] output=Regex.Matches(input,@"(?<!array)\[.*?\]")
.Cast<Match>()
.Select(x=>x.Value)
.ToArray();
或强>
string[] output=Regex.Split(input,@";?array[\d+]=");
答案 5 :(得分:0)
string str = "array[0]=[1,a,3,4,asdf54,6];array[1]=[1aaa,2,4,k=6,2,8];array[2]=[2,3,2,3,2,3=3k3k]";
string[] m1 = str.Split(';');
List<string> m3 = new List<string>();
foreach (string ms in m1)
{
string[] m2 = ms.Split('=');
m3.Add(m2[1]);
}