在之前的工作中突然遇到一个小问题,于是想作为笔记在这里记录下来。
这是关于如何替换路径中斜杠的问题,后来发现其实要解决这个问题其实很简单,那么这里我举例如下:
首先,我有一个字符串为:"blob\2015\01\10\1400\000000.log",我想要将"\"替换为"/",也就是最后要得到这样的效果:"blob/2015/01/10/1400/000000.log"
通常,我们会使用replace参数直接替换,但是你会发现PowerShell报了一个错误,告诉我这是一个无效的正则表达式。
PS C:\Windows\system32> "blob\2015\01\10\1400\000000.log" -replace "\","/"
Invalid regular expression pattern: \.
At line:1 char:43
+ "blob\2015\01\10\1400\000000.log" -replace <<<< "\","/"
+ CategoryInfo : InvalidOperation: (\:String) [], RuntimeException
+ FullyQualifiedErrorId : InvalidRegularExpression
而为什么如下,我们却可以将正斜杠顺利的替换为反斜杠呢?
PS C:\Windows\system32> "blob/2015/01/10/1400/000000.log" -replace "/","\"
blob\2015\01\10\1400\000000.log
其实'\'反斜杠很多时候也会在很多语言中用作转义字符的效果,那么或许PowerShell无法正常的解析,那么我还了一个方式,终于能够正常运行了,并且能够正常解析了。
PS C:\Windows\system32> "blob\2015\01\10\1400\000000.log" -replace "\\","/"
blob/2015/01/10/1400/000000.log
不过,虽然问题解决了,我依然发现如果我们以System.String类型下的replace方法来将反斜杠替换为正斜杠的话却是毫无问题的。
PS C:\Windows\system32> ("blob\2015\01\10\1400\000000.log").replace("\","/")
blob/2015/01/10/1400/000000.log