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

Spe*_*ick 5 c# regex

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

例子

  1. “Rep1007$chkCheckBox”
  2. “Rep127_Group_Text”

结果应该是:

  1. {"Rep1007","$chkCheckBox"}
  2. {“Rep127”,“_Group_Text”}

到目前为止,我已经尝试过 (Rep)[\d]{3,4} 和 ((Rep)[\d]{3,4})+ 但这两个都给了我不需要的结果

Wik*_*żew 3

使用Regex.Split经常会导致结果数组中出现空的或不需要的项目。使用(Rep)[\d]{3,4}in Regex.Split,会将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);
}
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

在此输入图像描述

细节:

  • ^- 字符串的开头
  • (Rep\d+)- 捕获组 1:Rep以及任意一个或多个数字
  • (.*)- 捕获组 2:除换行符之外的任何一个或多个字符,尽可能多
  • $- 字符串末尾。

使用基于环视的正则表达式可以更好地实现拆分方法:

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

请参阅此正则表达式演示

(?<=^Rep\d+)(?=[$_])Rep在紧接在字符串开头的 和 一个或多个数字、紧随其后的$或 的位置处分割字符串_