这让我非常困惑。为什么我在以下代码中获得重复的替换字符串:
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也有同感。
我知道有几种选择会做我期待的事情,但我更想知道其他什么比赛。*认为它的发现。
答案 0 :(得分:4)
您获得两次替换的原因是因为.*
您获得了两场比赛:"test"
和""
。
如果您将.*
更改为.+
,它将按预期方式运作:
String pattern = ".+";
另一种选择是添加字符串锚点的开头:
String pattern = "^.*"; // I know this looks like a smiley
答案 1 :(得分:2)
它匹配任何东西,然后它匹配所有内容,因此你有两个匹配和两个替换。