C# 为什么这个regexreplace语句没有做任何事情?
下面是一个基本上用字符串中的“.png”替换单词“Stack”的小方法。因此,名为“Grid01Stack”的内容将返回为“Grid01.png”,但是该操作根本不做任何操作,字符串保持不变。出什么事了?代码如下:C# 为什么这个regexreplace语句没有做任何事情?,c#,regex,string,replace,C#,Regex,String,Replace,下面是一个基本上用字符串中的“.png”替换单词“Stack”的小方法。因此,名为“Grid01Stack”的内容将返回为“Grid01.png”,但是该操作根本不做任何操作,字符串保持不变。出什么事了?代码如下: private string GetUriFromName(string GridName) { string result = Regex.Replace(GridName, @"\bStack\b", ".png");
private string GetUriFromName(string GridName)
{
string result = Regex.Replace(GridName, @"\bStack\b", ".png");
return (@"Resources/Images/"+result);
}
\bStack**\b**-正在查找单词前后带有空格、制表符、换行符等的整个单词“Stack”
您只需要字符串。根据Yuri和Cid的建议,为您的案例替换。虽然您可以简单地执行此操作:
GridName.Replace("Stack",".png")
如果单词“Stack”在字符串中出现多次,这不是最佳选项,因为它将替换所有实例。因此,例如,“Stack01Stack”
将变成“.png01.png”
。当您试图形成一个好的文件名时,您实际上只想将最后出现的“Stack”替换为“.png”,并且仅当它位于字符串末尾时。因此,如果堆栈多次出现,使用“Stack\b”作为建议的注释也可能会与有效的文件名发生冲突。例如,使用Regex“GridStack-01Stack”
将变成“Grid.png-01.png”
这都是基于对这些字符串可能是什么的推测,因此可能没有必要使用此解决方案,但我建议使用以下正则表达式,它仅在出现在字符串末尾时才会更改单词堆栈:
string result = Regex.Replace(GridName, "Stack$", ".png");
•字符串替换:
String x=“Grid01Stack.replace”(“Stack”、“.png”)代码>
•正则表达式:string x=Regex.Replace(“Grid01Stack”,“[Ss]tack$”,“.png”)代码>
正则表达式将搜索始终位于字符串末尾的堆栈
或堆栈
。第一个单词边界\b
在1S
之间不匹配1
和S
之间没有单词边界1和S
都是单词字符。\b堆栈\b
->Stack\b
不需要正则表达式GridName.Replace(“Stack”、“.png”)
足够,如果不打算匹配整个单词,请不要使用单词边界。只需使用stringresult=GridName.Replace(@“Stack”,“.png”)代码>在这种情况下。如果您计划在末尾匹配它,那么可以使用堆栈$”
regex。