为什么我的Regex.Replace字符串包含替换值两次?
问题描述:
我有以下字符串:aWesdE
,我想用Regex.Replace(string, string, string, RegexOptions)
为什么我的Regex.Replace字符串包含替换值两次?
目前转换为http://myserver.com/aWesdE.jpg
,我用这个代码:
string input = "aWesdE";
string match = "(.*)";
string replacement = "http://myserver.com/$1.jpg";
string output = Regex.Replace(input, match, replacement,
RegexOptions.IgnoreCase | RegexOptions.Singleline);
结果是输出最终成为:http://myserver.com/aWesdE.jpghttp://myserver.com/.jpg
因此,重置值正确显示,然后再次出现 - 非常奇怪。这里发生了什么?
答
实际上在您的正则表达式中有2个匹配。你确定你的对手是这样的:
string match = "(.*)";
这意味着匹配零个或多个字符,所以你有2场比赛 - 空字符串和文本。为了解决这个问题换着花样给
string match = "(.+)";
这意味着匹配一个或多个字符 - 在这种情况下,你只会得到一个匹配
这是没有道理给我。 '(。*)'只是匹配任何东西。既然它很贪婪,它就会一齐吃掉。 – 2014-11-22 19:30:58
@PatrickHofman如果使用上面的参数运行'Regex.Matches(input,match);',您会看到实际上有2个匹配项('aWesdE'和空字符串)。它们在替换时使用,这就是为什么使用'Replace'时会出现奇怪的结果。 – dotnetom 2014-11-22 19:37:32
你说得对。我测试你的解决方案。虽然感觉奇怪。 +1 – 2014-11-22 19:44:54