14

C# の正規表現について簡単な質問があります。

C#正規表現の$1と$2とは?

両方ともグループに属しますか?

4

2 に答える 2

21

これは、インデックスによってキャプチャされたグループの値です。$1 は最初にキャプチャされたグループで、$2 は 2 番目にキャプチャされたグループです。David が指摘したように、これらの値は置換パターンで使用されていました。

string input = "Hello World";
string result = Regex.Replace(input, @"(\w+) (\w+)", "$2 $1");

出力:World Hello

于 2013-10-02T15:48:14.593 に答える
4

これらは置換です。具体的に番号が付けられたグループ置換。ドキュメントから:

$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
于 2013-10-02T15:49:49.093 に答える