C#正则表达式多捕获

C#正则表达式多捕获,c#,regex,C#,Regex,我正在尝试编写一个C#Regexp,它可以匹配以下行: 行->我的文本1(示例文本1)(9874)(1478) 匹配项: [0]=我的文本1 [1] =示例文本1 [2] =9874 [3] =1478 行->内容1:我的文本2(文本2)(98631) 匹配项: [0]=内容1:我的文本2 [1] =文本2 [2] =98631 行->这是另一个示例:mqlsdjflkj(1478) 匹配项: [0]=这是另一个示例:mqlsdjflkj [1] =1478 我做了很多测试,但不能匹

我正在尝试编写一个C#Regexp,它可以匹配以下行:

行->我的文本1(示例文本1)(9874)(1478)

匹配项:

  • [0]=我的文本1
  • [1] =示例文本1
  • [2] =9874
  • [3] =1478
行->内容1:我的文本2(文本2)(98631)

匹配项:

  • [0]=内容1:我的文本2
  • [1] =文本2
  • [2] =98631
行->这是另一个示例:mqlsdjflkj(1478)

匹配项:

  • [0]=这是另一个示例:mqlsdjflkj
  • [1] =1478
我做了很多测试,但不能匹配多组

我试过那样的东西

Regex myRegex = new Regex(@"(.*?)(?:\((.*?)\).*?)*");

这将捕获最多4个组:

Regex myRegex = new Regex(@"(.*?)(?:\((.*?)\)(?:\((.*?)\)(?:\((.*?)\))?)?)?");

在计算复杂正则表达式的过程中,通常可以通过“手动”进行解析来做得更好。而且它通常更易于维护

private void button1_Click(object sender, EventArgs e)
{
    String[] r1 = MyParser("my text 1 (Sample Text1) (9874) (1478) ");
    String[] r2 = MyParser("Thing1 : my text 2 (Text2) (98631)");
    String[] r3 = MyParser("This is a other Sample : mqlsdjflkj (1478) "); 
}

string[] MyParser(String Input)
{
    String[] RawResult;

    RawResult = Input.Split(new char[] {'(', ')'},  StringSplitOptions.RemoveEmptyEntries );

    List<string> Results = new List<string>();

    foreach(String S in RawResult)
    {
        if (String.IsNullOrWhiteSpace(S) == false)
            Results.Add(S.Trim());
    }          

    return Results.ToArray();
}
private void按钮1\u单击(对象发送者,事件参数e)
{
String[]r1=MyParser(“我的文本1(示例文本1)(9874)(1478)”;
String[]r2=MyParser(“Thing1:mytext2(Text2)(98631)”;
String[]r3=MyParser(“这是另一个示例:mqlsdjflkj(1478)”;
}
字符串[]MyParser(字符串输入)
{
字符串[]结果;
RawResult=Input.Split(新字符[]{'(',')},StringSplitOptions.RemoveEmptyEntries);
列表结果=新列表();
foreach(RawResult中的字符串S)
{
if(String.IsNullOrWhiteSpace=false)
结果:添加(S.Trim());
}          
返回结果。ToArray();
}

Thx,但它不工作…:(我试过C代码,但没有成功:(@Muby:你试过双重转义
\(
&
\\)