.NET正则表达式替换单行匹配未知字符

时间:2011-10-06 23:41:56

标签: c# .net regex replace

这让我非常困惑。为什么我在以下代码中获得重复的替换字符串:

static void Main(string[] args)
{
    String input = "test";
    String pattern = ".*";
    String replacement = "replace";
    Console.WriteLine(Regex.Replace(input, pattern, replacement));
    Console.Read();
}

输出到控制台:

replacereplace

据我所知,正则表达式会匹配终结字符,但应该没有。我也明白这个模式可以什么都不匹配,但显然输入并不是什么。这发生在.Net 3.5和4.0中,我对SingleLine和MultiLine也有同感。

我知道有几种选择会做我期待的事情,但我更想知道其他什么比赛。*认为它的发现。

2 个答案:

答案 0 :(得分:4)

您获得两次替换的原因是因为.*您获得了两场比赛:"test"""

如果您将.*更改为.+,它将按预期方式运作:

String pattern = ".+";

另一种选择是添加字符串锚点的开头:

String pattern = "^.*"; // I know this looks like a smiley

答案 1 :(得分:2)

它匹配任何东西,然后它匹配所有内容,因此你有两个匹配和两个替换。