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

Jos*_*den 5 .net c# regex replace

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

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

这输出到控制台:

replacereplace
Run Code Online (Sandbox Code Playgroud)

我知道正则表达式会得到奇怪的匹配结束符,但应该没有.我也明白这个模式可以什么都不匹配,但很明显输入并不算什么.这发生在.Net 3.5和4.0中,我对SingleLine和MultiLine也有同样的看法.

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

Nul*_*ion 4

您获得两个替换的原因是因为.*您获得了两个匹配项:"test"、 和""

如果您进行更改.*.+它将按照您期望的方式工作:

String pattern = ".+";
Run Code Online (Sandbox Code Playgroud)

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

String pattern = "^.*"; // I know this looks like a smiley
Run Code Online (Sandbox Code Playgroud)