将被捕获的括号中的字符串拆分成数组

3
我在项目中有以下字符串:
((1,01/31/2015)(1,文件路径)(1,名称)(1,代码)(1,字符串)(1, ))
我想将此字符串分割成部分,以获取括号内的信息(例如1,文件路径(1,文件路径)),但是整个字符串也在捕获括号中,如您所见。然后,我尝试使用string[] array = Regex.Split(originalString,SomeRegexHere)将结果放入数组中。
现在我想知道最好的方法是什么,只需删除字符串的第一个和最后一个字符,这样我就没有整个字符串包含的捕获括号,还是有一些方法可以在此基础上使用正则表达式来获得我想要的结果?

既然你知道第一个和最后一个字符是括号,我会将它们删除并匹配剩余的数据。正则表达式可以很好地完成这项工作。 - Sam Axe
1
不是使用 RegEx.Split,你需要使用 RegEx.Match - Sam Axe
你现在不应该担心性能。差别只会在毫秒级别。 - Sam Axe
3
“Filepath”或“String”能包含括号吗?例如,“C:\temp\file (1).txt”或“This is a string (with parentheses)”。 - Andrew Morton
是的,文件路径可以是任何真实的文件路径,因此理论上它可能包含括号。 - Dante1986
3个回答

5
string s = "((1,01/31/2015)(1,Filepath)(1,name)(1,code)(1,String)(1,    ))";
var data = s.Split(new string[]{"(", ")"}, StringSplitOptions.RemoveEmptyEntries)

您的数据将会这样。
["1,01/31/2015",
 "1,Filepath", 
 "1,name", 
 "1,code", 
 "1,String", 
 "1,"]

我正在尝试使用这个,但是在(["(", ")"],部分出现了一堆错误,不确定为什么它不喜欢这个。 - Dante1986
抱歉,我太沉迷于 JavaScript 了。我已经编辑了答案。 - Parv Sharma
谢谢,完美运作!不过我需要小心,不要在文件名中使用任何括号,因为那会搞砸它哈哈。 - Dante1986
如果您的文件名中有括号并且它们不是“好的”,那么我认为将无法拆分您的字符串(例如,文件名file )(.txt是一个有效的名称)。@Dante1986 - Jerry

1

2
是否应该使用(?<=()[^()]*(?=))来排除第二个"(" - Eric
1
然而,你的模式与之匹配。 - Sam Axe

1
你可以创建一个不包含前两个和后两个括号的子字符串,然后在封闭的括号上进行分割。
    var s = "((1,01/31/2015)(1,Filepath)(1,name)(1,code)(1,String)(1, ))";

    var result = s.Substring(2, s.Length - 4)
                  .Split(new string[]{")("}, StringSplitOptions.RemoveEmptyEntries);

    foreach(var r in result)
        Console.WriteLine(r);

输出

1,01/31/2015
1,Filepath
1,name
1,code
1,String
1, 

示例


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接