亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用于獲取所有可能匹配項的 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 關注
  • 262 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號