Regex.Replace - Substitutions

 

這是屬於 Regex.Replace 的 Substituting 特有作法

 

一、Substituting a Numbered Group

syntax:$number

using System;
using System.Text.RegularExpressions;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "2*3";
            string pattern = @"(\d)\*(\d)";
            string replacement = str + "=" + "$2+$1+1";
            string result = Regex.Replace(str, pattern, replacement);
            Console.WriteLine(result);
        }
    }
}

其結果為

說明:

1、「$1」代表第一分組符合值、「$2」代表第二分組符合值、

「$3」代表第三分組符合值...依序類推。

2、replacement 在字串上可以和 n 個「$n」做分組的任意組合。

 

二、Substituting a Named Group

syntax:${name}

using System;
using System.Text.RegularExpressions;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "2*3";
            string pattern = @"(?<two>\d)\*(?<three>\d)";
            string replacement = str + "=" + "${three}+${two}+1";
            string result = Regex.Replace(str, pattern, replacement);
            Console.WriteLine(result);
        }
    }
}

其結果為

說明:

跟上例一樣,差別在於使用具名分組的方式來組合。

 

三、Substituting a "$" Symbol

syntax:$$

using System;
using System.Text.RegularExpressions;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "2*3";
            string pattern = @"(?<two>\d)\*(?<three>\d)";
            string replacement = str + "=" + "$$${three}+${two}+1";
            string result = Regex.Replace(str, pattern, replacement);
            Console.WriteLine(result);
        }
    }
}

其結果為

說明:

在 Substituting 裡,「$」是一個關鍵字,如果要在「替換群組」前面再加上一個單純的「$」號,

請使用「$$」,其將被轉譯成一個「$」號。

 

四、Substituting the Entire Match

syntax:$&

using System;
using System.Text.RegularExpressions;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "123";
            string pattern = @"(\d)+";
            string replacement = "$&";
            string result = Regex.Replace(str, pattern, replacement);
            Console.WriteLine(result);
        }
    }
}

其結果為

說明:

「$&」號用來取得所有群組結合成一串內容,如上例會有一個群組分別是「1」、「2」、「3」,

每一群組的分組只有自己一個。

 

五、Substituting the Text before the Match

syntax:$`

using System;
using System.Text.RegularExpressions;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "123a987";
            string pattern = @"a";
            string replacement = "$`";
            string result = Regex.Replace(str, pattern, replacement);
            Console.WriteLine(result);
        }
    }
}

其結果為

說明:

拿前面的字串當作要替換的內容。

 

六、Substituting the Text after the Match

syntax:$'

using System;
using System.Text.RegularExpressions;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "123a987";
            string pattern = @"a";
            string replacement = "$'";
            string result = Regex.Replace(str, pattern, replacement);
            Console.WriteLine(result);
        }
    }
}

其結果為

說明:

拿後面的字串當作要替換的內容。

 

七、Substituting the Last Captured Group

syntax:$+

 

八、Substituting the Entire Input String

syntax:$_

 

參考資料:

Substitutions in Regular Expressions