我可以使用什么regEx在C#.net中用逗号字符拆分字符串

时间:2012-02-06 21:02:34

标签: c# regex

我想用逗号分割字符串。例如name1(M, 06/06/1993), Namit2 (M, 18/05/2000)。 首先,我想将字符串拆分为

  1. name1(M, 06/06/1993)
  2. Namit2 (M, 18/05/2000)
  3. 在此之后我想进一步拆分,例如name1(M, 06/06/1993)将拆分为

    1. name1
    2. M
    3. 06/06/1993
    4. 案例1:name1(M,06/06/1995),name2(M,18/05/2000)

      首先应该分割输出

      1. name1(M,06/06/1995)
      2. name2(M,18/05/2000)
      3. 第一项的第二次分割

        1.name1 2.M 3.06 / 06/1995

        案例2:name1(M,26/01/2002)

        可能如上所述,只有一个项目

        案例3:name1(M),名称2(F)

        首先拆分

        1. name1(m)
        2. name2(f)
        3. 第一项的第二次分割

          1. NAME1
          2. 案例4:Nikesh,Nihar

            首先拆分

            1. 尼科什
            2. nihar

5 个答案:

答案 0 :(得分:0)

尝试以下方面的内容:
(.+)\),(.+)
(.+)\s\((.+),\s(.+)\)

答案 1 :(得分:0)

不知道您选择的语言,但在Java中您可以这样做:

string s1="name1(M, 06/06/1993)";
string[] tokens = Regex.Split(s1, ",\\s*|\\(\\s*|\\s*\\)");
foreach (string token in tokens) {
    Console.WriteLine(token);
}

<强>输出:

[name1, M, 06/06/1993]

答案 2 :(得分:0)

我会在Oracle中执行REGEXP_REPLACE函数。像下面的东西

REGEXP_REPLACE ( 'name1(M, 06/06/1993), Namit2 (M, 18/05/2000)',
                        '.+\), ') A,
REGEXP_REPLACE ( 'name1(M, 06/06/1993), Namit2 (M, 18/05/2000)',
                        '\), .+', ')') B

在上述案例中A = Namit2(M,18/05/2000) 而B = name1(M,06/06/1993)

您可以将A和B存储在不同的变量中,然后对它们运行更多的regExp以将它们拆分。

答案 3 :(得分:0)

这应该拆分每一行

[^\(|,]+?\(.{13}\)(?=,|\.)

这将进一步分割每场比赛

\(|,|\)

我使用RegExBuddy使用.NET正则表达式引擎测试它。

更新

这应该拆分两种变体

[\w\d\s]+?\([^\)]+\)

答案 4 :(得分:0)

我只使用Regex.Split作为第一个示例,使用此正则表达式

\s*,(?![^(]*\))\s*

表示拆分,(前后可选空格)。重要的部分是这个负向前瞻(?![^(]*\)),如果前面有一个收盘圆括号,但之前没有开盘,它就会失败。

这意味着在第一步中,我将分开不在括号内的逗号。

对于第二次拆分,我在圆括号上使用普通String.Split一个带有StringSplitOptions.RemoveEmptyEntries的逗号,以避免因为右括号而在末尾有一个空条目。

对于您的示例,这可以为您提供所需内容:

String s1 = "name1(M, 06/06/1995), name2(M, 18/05/2000)";
String s2 = "name1(M, 26/01/2002)";
String s3 = "name1 (M), name 2(F)";
String s4 = "Nikesh, Nihar";

String[] input = { s1, s2, s3,s4 };
String[] Split1 = {};
List<String[]> Result = new List<String[]>();

foreach (String item in input) {
    Console.WriteLine("Splitting: " + item);

    Split1 = Split1.Concat(Regex.Split(item, @"\s*,(?![^(]*\))\s*")).ToArray();
}

foreach (String item in Split1) {
    Console.WriteLine("Splitting: " + item);

    Result.Add(item.Split(new char[]{ '(', ')', ',' }, StringSplitOptions.RemoveEmptyEntries));
}

foreach (String[] item in Result) {
    Console.WriteLine(string.Join(", ", item.Select(v => v.ToString())));
}

Console.ReadLine();