如何在Regex.Replace()中获得匹配?

时间:2014-09-11 11:35:00

标签: c# .net regex

我希望有一种方法可以捕捉字符串中的年份,并将主题放在()之间,而我在正则表达式中非常棒。例如

This is 2014 and the next year will be 2015

将会是

This is (2014) and the next year will be (2015)

我使用\d{4}来捕获年份,但我不知道是否可以将字符串发送到下一个参数?

4 个答案:

答案 0 :(得分:3)

以下正则表达式将捕获输入字符串中的四位数字。在替换部分中,在捕获的数字之前和之后添加括号。

正则表达式:

(\b\d{4}\b)

替换字符串:

($1)

代码:

string str = "This is 2014 and the next year will be 2015";
string result = Regex.Replace(str, @"(\b\d{4}\b)", "($1)");
Console.WriteLine(result);

IDEONE

模式说明:

  • () - Capturing groups.
  • \b - 它被称为字边界。它匹配单词字符\w和非单词字符\W
  • \d{4} - 正好匹配四位数字。
  • \b - 单词字符和非单词字符之间的匹配。

答案 1 :(得分:1)

在C#中,您可以这样做:

Input: "This is 2014 and the next year will be 2015"
Pattern: "\d{4}"
Replacement: "($0)"

但是根据您的模式,这将匹配4位数的所有数值。

注意

字符串替换模式中使用$0$&来指代整个匹配而不是任何捕获的子字符串。

答案 2 :(得分:1)

string pattern = @"\(\d{4}\)";
string result = Regex.Replace(str, pattern , "($1)");

这将在打开/关闭括号中找到任何4位数字。 如果年份数可以改变,我认为正则表达式是最好的方法。

相反,此代码会告诉您模式是否匹配

答案 3 :(得分:0)

试试这个

"This is 2014 and the next year will be 2015".replace(/(\d{4})/gi, '($1)');