如何在c#中使用regex.Matches

时间:2023-01-18 19:53:09

how to use regex.Matches

如何使用regex.Matches

input string

输入字符串

  string strQuery = "BO_WEEKOFF_MASTER.year, week_off_day=case when "+
                    "BO_WEEKOFF_MASTER.week_off_day ='1' then 'Sunday' "+ 
                    "when  BO_WEEKOFF_MASTER.week_off_day ='2' then 'Monday' "+
                    "when  BO_WEEKOFF_MASTER.week_off_day ='3' then 'Tuesday' "+
                    "when  BO_WEEKOFF_MASTER.week_off_day ='4' then 'Wednesday' "+
                    "when  BO_WEEKOFF_MASTER.week_off_day ='5' then 'Thursday' "+
                    "when  BO_WEEKOFF_MASTER.week_off_day ='6' then 'Friday' "+
                    "when  BO_WEEKOFF_MASTER.week_off_day ='7' then 'Saturday' "+
                    "else '' end,"+
                    "BO_WEEKOFF_MASTER.year, week_off_day=case when "+
                    "BO_WEEKOFF_MASTER.week_off_day ='1' then 'Sunday' "+                   
                    "when  BO_WEEKOFF_MASTER.week_off_day ='2' then 'Monday' "+
                    "when  BO_WEEKOFF_MASTER.week_off_day ='3' then 'Tuesday' "+ 
                    "when  BO_WEEKOFF_MASTER.week_off_day ='4' then 'Wednesday' "+  
                    "when  BO_WEEKOFF_MASTER.week_off_day ='5' then 'Thursday' "+ 
                    "when  BO_WEEKOFF_MASTER.week_off_day ='6' then 'Friday' "+ 
                    "when  BO_WEEKOFF_MASTER.week_off_day ='7' then 'Saturday' "+
                    "else '' end,";

my pattern is

我的模式是

MatchCollection words = Regex.Matches(strQuery, @"(?i)?<firstMatch>.*,)  (?<secondMatch>[^=]*)=case(?<thirdMatch>.*end\b)");
    foreach (Match word in words)
    {
        strQuery = Regex.Replace(word , @"....", @" ... ", RegexOptions.IgnoreCase);

    }

issue is its matching only once

问题是它只匹配一次

i need output like below

我需要如下输出

 BO_WEEKOFF_MASTER.year, 
 case 
    when BO_WEEKOFF_MASTER.week_off_day ='1' then 'Sunday' 
    when  BO_WEEKOFF_MASTER.week_off_day ='2' then 'Monday' 
    when  BO_WEEKOFF_MASTER.week_off_day ='3' then 'Tuesday' 
    when  BO_WEEKOFF_MASTER.week_off_day ='4' then 'Wednesday'  
    when  BO_WEEKOFF_MASTER.week_off_day ='5' then 'Thursday' 
    when  BO_WEEKOFF_MASTER.week_off_day ='6' then 'Friday' 
    when  BO_WEEKOFF_MASTER.week_off_day ='7' then 'Saturday' 
    else '' 
 end **" week_off_day"** ,
 BO_WEEKOFF_MASTER.year, 
 case 
    when BO_WEEKOFF_MASTER.week_off_day ='1' then 'Sunday' 
    when  BO_WEEKOFF_MASTER.week_off_day ='2' then 'Monday' 
    when  BO_WEEKOFF_MASTER.week_off_day ='3' then 'Tuesday' 
    when  BO_WEEKOFF_MASTER.week_off_day ='4' then 'Wednesday'  
    when  BO_WEEKOFF_MASTER.week_off_day ='5' then 'Thursday' 
    when  BO_WEEKOFF_MASTER.week_off_day ='6' then 'Friday' 
    when  BO_WEEKOFF_MASTER.week_off_day ='7' then 'Saturday' 
    else '' 
end **"week_off_day"**,

where i made error, thank u

我犯了错误,谢谢你

1 个解决方案

#1


1  

You need to use capturing groups.

您需要使用捕获组。

Regex.Replace(word , @"(\w+)=(case.*?\bend\b)", @"$2 ""$1""", RegexOptions.IgnoreCase);

DEMO

DEMO

#1


1  

You need to use capturing groups.

您需要使用捕获组。

Regex.Replace(word , @"(\w+)=(case.*?\bend\b)", @"$2 ""$1""", RegexOptions.IgnoreCase);

DEMO

DEMO