为了账号安全,请及时绑定邮箱和手机立即绑定

用于获取所有可能匹配项的 C# 正则表达式

用于获取所有可能匹配项的 C# 正则表达式

C#
手掌心 2022-01-09 10:21:11
我想提取这个正则表达式的所有出现\d{7,8}(每个长度为 7 或 8 的数字)输入可能类似于asd123456789bbaasd我想要的是一个数组:["1234567", "12345678", "2345678", "23456789"]长度为 7 或 8 的数字的所有可能出现情况。Regex.Matches 的工作方式不同,它返回所有连续出现的匹配项...... ["12345678"]任何的想法?
查看完整描述

2 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

对于重叠匹配,您需要在前瞻中捕获

(?=(\d{7}))(?=(\d{8})?)

在 regex101 看到这个演示

  • (?=(\d{7}))第一个捕获组是强制性的,将捕获任何 7 位数字

  • (?=(\d{8})?)第二个捕获组是可选的(在同一位置触发)

因此,如果有 7 位匹配,它们将在组(1)中,如果 8 位匹配,则在组(2)中。在 .NET Regex 中,您可能可以为两个组使用一个名称

要仅在前面有 8 个时才获得 7 位匹配,请在此演示中删除?after 。(\d{8})


查看完整回答
反对 回复 2022-01-09
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

不是您真正要求的,但最终结果是。


using System;

using System.Collections.Generic;


namespace _52228638_ExtractAllPossibleMatches

{

    class Program

    {


        static void Main(string[] args)

        {

            string inputStr = "asd123456789bbaasd";

            foreach (string item in GetTheMatches(inputStr))

            {

                Console.WriteLine(item);

            }

            Console.ReadLine();

        }


        private static List<string> GetTheMatches(string inputStr)

        {

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

            int[] lengths = new int[] { 7, 8 };

            for (int i = 0; i < lengths.Length; i++)

            {

                string tmp = new System.Text.RegularExpressions.Regex("(\\d{" + lengths[i] + ",})").Match(inputStr.ToString()).ToString();

                while (tmp.Length >= lengths[i])

                {

                    retval.Add(tmp.Substring(0, lengths[i]));

                    tmp = tmp.Remove(0, 1);

                }

            }

            return retval;

        }

    }

}


查看完整回答
反对 回复 2022-01-09
  • 2 回答
  • 0 关注
  • 219 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信