Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于根据模式将字符串拆分为两个集合的正则表达式_C#_Regex - Fatal编程技术网

C# 用于根据模式将字符串拆分为两个集合的正则表达式

C# 用于根据模式将字符串拆分为两个集合的正则表达式,c#,regex,C#,Regex,使用C#Regex.Split方法,我想分割总是以RepXYZ开头的字符串,其中XYZ位是一个总是有3或4个字符的数字 例子 “Rep1007$chkCheckBox” “Rep127_组_文本” 结果应该是: {“Rep1007”,“$chkCheckBox”} {“Rep127”,“_组_文本”} 到目前为止,我已经尝试过(Rep)[\d]{3,4}和((Rep)[\d]{3,4})+,但这两种方法都会给我带来不想要的结果尝试在$或上拆分正则表达式模式: string input = &qu

使用C#Regex.Split方法,我想分割总是以RepXYZ开头的字符串,其中XYZ位是一个总是有3或4个字符的数字

例子

  • “Rep1007$chkCheckBox”
  • “Rep127_组_文本”
  • 结果应该是:

  • {“Rep1007”,“$chkCheckBox”}
  • {“Rep127”,“_组_文本”}

  • 到目前为止,我已经尝试过(Rep)[\d]{3,4}和((Rep)[\d]{3,4})+,但这两种方法都会给我带来不想要的结果

    尝试在
    $
    上拆分正则表达式模式:

    string input = "Rep127_Group_Text";
    string[] parts = input.Split(new[] { '$', '_' }, 2);
    foreach (string part in parts)
    {
        Console.WriteLine(part);
    }
    
    这张照片是:

    Rep127
    Group_Text
    

    使用
    Regex.Split
    通常会导致结果数组中出现空项或不需要的项。在
    Regex.Split
    中使用
    (Rep)[\d]{3,4}
    ,将不带数字的
    Rep
    放入结果数组中
    (Rep[\d]{3,4})
    将把
    Rep
    和数字放入结果中,但由于匹配在开始处,因此数组中将有一个空项

    我建议在这里使用
    Regex.Match

    var match = Regex.Match(text, @"^(Rep\d+)(.*)$");
    if (match.Success)
    {
        Console.WriteLine(match.Groups[1].Value);
        Console.WriteLine(match.Groups[2].Value);
    }
    

    详情:

    • ^
      -字符串的开头
    • (Rep\d+)
      -捕获组1:
      Rep
      和任意一个或多个数字
    • (.*)
      -捕获组2:除换行符外的任何一个或多个字符,尽可能多
    • $
      -字符串结束
    使用基于lookaround的正则表达式可以更好地实现拆分方法:

    var results = Regex.Split(text, @"(?<=^Rep\d+)(?=[$_])");
    

    var results=Regex.Split(text,@)(?您的Regex与
    Rep127_Group_text
    @WiktorStribiżew一起修复了它,至少对于给定的示例数据是如此。似乎没有任何API方法可以阻止
    Regex.Split
    在每次发生时进行拆分(与常规的Regex字符串拆分不同)。