C# の正規表現について簡単な質問があります。
C#正規表現の$1と$2とは?
両方ともグループに属しますか?
これは、インデックスによってキャプチャされたグループの値です。$1 は最初にキャプチャされたグループで、$2 は 2 番目にキャプチャされたグループです。David が指摘したように、これらの値は置換パターンで使用されていました。
string input = "Hello World";
string result = Regex.Replace(input, @"(\w+) (\w+)", "$2 $1");
出力:World Hello
これらは置換です。具体的に番号が付けられたグループ置換。ドキュメントから:
$number 言語要素には、number キャプチャ グループと一致した最後の部分文字列が置換文字列に含まれます。ここで、number はキャプチャ グループのインデックスです。たとえば、置換パターン $1 は、一致した部分文字列が最初にキャプチャされたグループに置き換えられることを示します。番号付きキャプチャ グループの詳細については、「正規表現でのグループ化構造」を参照してください。
(?) 構文を使用して明示的に名前が割り当てられていないキャプチャ グループには、左から右に 1 から番号が付けられます。名前付きグループにも、最後の名前なしグループのインデックスより 1 大きい番号から始まり、左から右に番号が付けられます。たとえば、正規表現 (\w)(?\d) では、group という名前の数字のインデックスは 2 です。
number が、正規表現パターンで定義された有効なキャプチャ グループを指定していない場合、$number は、各一致を置き換えるために使用されるリテラル文字シーケンスとして解釈されます。
次の例では、$number 置換を使用して、10 進数値から通貨記号を取り除きます。通貨値の先頭または末尾にある通貨記号を削除し、2 つの最も一般的な小数点記号 ("." と ",") を認識します。
using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string pattern = @"\p{Sc}*(\s?\d+[.,]?\d*)\p{Sc}*"; string replacement = "$1"; string input = "$16.32 12.19 £16.29 €18.29 €18,29"; string result = Regex.Replace(input, pattern, replacement); Console.WriteLine(result); } } // The example displays the following output: // 16.32 12.19 16.29 18.29 18,29