执行 Regex.Replace() 时如何使用命名组
Posted
技术标签:
【中文标题】执行 Regex.Replace() 时如何使用命名组【英文标题】:How to use named groups when performing a Regex.Replace() 【发布时间】:2012-10-09 08:26:29 【问题描述】:在执行 Regex.Replace 时如何使用命名捕获?我已经走到了这一步,它做了我想要的,但不是我想要的:
[TestCase("First Second", "Second First")]
public void NumberedReplaceTest(string input, string expected)
Regex regex = new Regex("(?<firstMatch>First) (?<secondMatch>Second)");
Assert.IsTrue(regex.IsMatch(input));
string replace = regex.Replace(input, "$2 $1");
Assert.AreEqual(expected, replace);
我想用命名捕获匹配这两个词,然后在执行替换时使用(命名)捕获。
【问题讨论】:
【参考方案1】:您可以使用"$secondMatch $firstMatch"
,而不是"$2 $1"
。
你可以做的所有替换列表here。
这是一个简短的列表:
$number - 按编号捕获的组。
$name - 按名称捕获的组。
$$ - $ 字面量。
$& - 整场比赛。
$` - 匹配前的输入字符串。
$' - 匹配后的输入字符串。
$+ - 最后一组被捕获。
$_ - 整个输入字符串。
【讨论】:
如何在保持字符串其余部分不变的情况下将命名组替换为其他值?【参考方案2】:只需替换为$groupName
[TestCase("First Second", "Second First")]
public void NumberedReplaceTest(string input, string expected)
Regex regex = new Regex("(?<firstMatch>First) (?<secondMatch>Second)");
Assert.IsTrue(regex.IsMatch(input));
string replace = regex.Replace(input, "$secondMatch $firstMatch");
Assert.AreEqual(expected, replace);
【讨论】:
以上是关于执行 Regex.Replace() 时如何使用命名组的主要内容,如果未能解决你的问题,请参考以下文章