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

标签 c# regex

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

  • "Rep1007$chkCheckBox"
  • "Rep127_Group_Text"

  • 结果应该是:
  • {"Rep1007","$chkCheckBox"}
  • {"Rep127","_Group_Text"}

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

    最佳答案

    使用 Regex.Split通常会导致结果数组中出现空项或不需要的项。使用 (Rep)[\d]{3,4}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);
    }
    
    regex demo
    enter image description here
    细节:
  • ^ - 字符串开头
  • (Rep\d+) - 捕获组 1:Rep和任何一位或多位数字
  • (.*) - 捕获组 2:除换行符以外的任何一个或多个字符,尽可能多
  • $ - 字符串的结尾。

  • 使用基于环视的正则表达式可以更好地实现拆分方法:
    var results = Regex.Split(text, @"(?<=^Rep\d+)(?=[$_])");
    
    this regex demo .(?<=^Rep\d+)(?=[$_])在紧跟 Rep 之前的位置拆分字符串和字符串开头的一位或多位数字,紧随其后的是 $_ .

    关于c# - 用于根据模式将字符串拆分为两个集合的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63845014/

    相关文章:

    c# - 在保留 "splitter words"的替代完整单词列表上分割句子

    c# - 如何将应用程序设置绑定(bind)到 TableView 中已编辑的 EntryCell?

    javascript - Web API 2.0 上的 COR 请求

    c# - Sqlite 上的 IdentityDbContext

    C# 检查按钮是否被第二次点击

    regex - 字符名称,替换和Umlaut “Ü”:格式错误的UTF-8字符

    c# - Accord.NET 中的多标签支持向量机

    javascript - 使用javascript在字符串中查找电子邮件地址

    Mysql正则表达式用数字搜索

    c# - 西里尔文文本验证