为什么这个正则表达式替换语句无法执行任何操作?



下面是一个很小的方法,基本上将字符串中的"Stack"替换为".png"。因此,名为"Grid01Stack"的东西将返回为"Grid01.png",但是该操作根本不执行任何操作,字符串保持不变。出了什么问题?这是代码:

private string GetUriFromName(string GridName)
{            
string result = Regex.Replace(GridName, @"bStackb", ".png");
return (@"Resources/Images/"+result);
}

虽然你可以简单地做,但根据Yuri和Cid的建议:

GridName.Replace("Stack",".png")

如果单词"Stack"在字符串中出现多次,这不是最佳选择,因为它将替换所有实例。因此,例如,"Stack01Stack"将成为".png01.png".当您试图形成一个好的文件名时,您实际上只想将最后一次出现的"Stack"替换为".png",并且仅当它位于字符串的末尾时。因此,如果 Stack 多次出现,使用"Stack\b"作为建议的注释最终也可能弄乱有效的文件名。例如,使用该正则表达式"GridStack-01Stack"将变得"Grid.png-01.png"

这都是基于对这些字符串可能是什么的推测,因此此解决方案可能不是必需的,但我推荐以下正则表达式,它只会在字符串末尾出现时更改单词 Stack:

string result = Regex.Replace(GridName, "Stack$", ".png");

\b Stack**\b** - 正在查找单词前后带有空格、制表符、换行符等的整个单词"Stack"。

你只需要String.Replace为你的情况。

• 字符串替换:string x = "Grid01Stack".Replace("Stack", ".png");

• 正则表达式:string x = Regex.Replace("Grid01Stack", "[Ss]tack$", ".png");正则表达式将搜索始终位于字符串末尾的Stackstack

最新更新