正则表达式中的$ 1和$ 2是多少?

时间:2013-10-02 15:46:30

标签: c# regex

我对C#中的正则表达式有一个简单的问题。

  

C#正则表达式的$ 1和$ 2是什么?

     

两者都属于小组吗?

2 个答案:

答案 0 :(得分:14)

这是按索引捕获的组的值。 $ 1是第一个被捕获的组,$ 2是第二个被捕获的组。正如大卫指出的那样,这些值用于替换模式。

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

输出:World Hello

答案 1 :(得分:4)

这些是substitutions。具体来说是numbered group substitutions。来自文档:

  

$ number语言元素包括匹配的最后一个子字符串   替换字符串中的数字捕获组,其中number为   捕获组的索引。例如,替换模式   $ 1表示匹配的子字符串将被第一个替换   被捕集团。有关编号捕获组的更多信息,   请参阅正则表达式中的分组构造。

     

使用。捕获未明确指定名称的组   (?)语法从一开始从左到右编号。   命名组也从左到右编号,从1开始   大于上一个未命名组的索引。例如,在   正则表达式(\ w)(?\ d),指定数字的索引   小组是2。

     

如果number没有指定在中定义的有效捕获组   正则表达式模式,$ number被解释为文字   用于替换每个匹配的字符序列。

     

以下示例使用$ number替换来删除   十进制值的货币符号。它删除货币符号   在货币价值的开头或结尾找到,并承认   两个最常见的小数分隔符("。"和",")。

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
相关问题