2014-11-22 70 views
4

我有以下字符串: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

因此,重置值正确显示,然后再次出现 - 非常奇怪。这里发生了什么?

回答

6

实际上在您的正则表达式中有2个匹配。你确定你的对手是这样的:

string match = "(.*)"; 

这意味着匹配零个或多个字符,所以你有2场比赛 - 空字符串和文本。为了解决这个问题换着花样给

string match = "(.+)"; 

这意味着匹配一个或多个字符 - 在这种情况下,你只会得到一个匹配

+0

这是没有道理给我。 '(。*)'只是匹配任何东西。既然它很贪婪,它就会一齐吃掉。 – 2014-11-22 19:30:58

+0

@PatrickHofman如果使用上面的参数运行'Regex.Matches(input,match);',您会看到实际上有2个匹配项('aWesdE'和空字符串)。它们在替换时使用,这就是为什么使用'Replace'时会出现奇怪的结果。 – dotnetom 2014-11-22 19:37:32

+0

你说得对。我测试你的解决方案。虽然感觉奇怪。 +1 – 2014-11-22 19:44:54

相关问题