【问题标题】:Split string into array that is enclosed in capturing parentheses将字符串拆分为包含在捕获括号中的数组
【发布时间】:2015-03-05 09:12:40
【问题描述】:

我的项目中有以下字符串:

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

我想将此字符串拆分为我在捕获括号中获取信息的部分(例如1,Filepath 或(1,Filepath),但正如您所看到的,整个字符串也在捕获括号中。然后我尝试用string[] array = Regex.Split(originalString,SomeRegexHere)放入数组

现在我想知道最好的方法是什么,只需删除字符串的第一个和最后一个字符,这样我就没有包含整个字符串的捕获括号,或者有什么方法可以在这个上使用正则表达式得到我想要的结果?

【问题讨论】:

  • 既然您知道第一个和最后一个字符是括号,我将删除它们并匹配其余数据。 RegEx 可以正常工作。
  • 不是RegEx.Split,你需要RegEx.Match
  • 此时您不应该担心性能。差异将以毫秒为单位。
  • Filepath 或 String 可以包含括号吗?例如。 “C:\temp\file (1).txt”或“这是一个字符串(带括号)。”
  • 是的,文件路径可以是任何真实的文件路径,所以理论上它可以有括号。

标签: c# regex string split


【解决方案1】:
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,"]

【讨论】:

  • mm 试图使用这个,但我在(["(", ")"], 部分遇到了一堆错误,不知道为什么它不喜欢这个。
  • 我的歉意.. javascript 太消耗了。我已经编辑了答案
  • 谢谢,完美!虽然我需要小心不要在文件名中使用任何括号,因为那样会搞砸哈哈
  • @Dante1986 如果文件名中有括号并且它们不是'nice',那么我认为不可能拆分你的字符串(例如文件名file )(.txt 是有效的名称)。
【解决方案2】:

您可以创建一个没有前 2 个和后 2 个括号的子字符串,然后将其拆分到封闭的括号中

    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, 

Example

【讨论】:

    【解决方案3】:
    (?<=\()[^()]*(?=\))
    

    只需匹配并获取您的内容,而不是拆分。参见演示。

    https://regex101.com/r/eS7gD7/15

    【讨论】:

    • 应该是(?
    • 然而,你的模式匹配它。
    猜你喜欢
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 2015-12-14
    • 2013-03-30
    • 2019-08-26
    • 2020-10-19
    • 2021-04-05
    • 2017-03-12
    相关资源
    最近更新 更多