14

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

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

两者都属于组吗?

4

2 回答 2

21

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

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 表示匹配的子字符串将被第一个捕获的组替换。有关编号捕获组的更多信息,请参阅正则表达式中的分组构造。

未使用 (?) 语法明确指定名称的捕获组从一开始从左到右编号。命名组也从左到右编号,从比最后一个未命名组的索引大一开始。例如,在正则表达式 (\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
于 2013-10-02T15:49:49.093 回答