精确匹配两个反斜杠

时间:2018-07-30 11:02:52

标签: regex powershell

我正在尝试通过Powershell regexp -replace命令将字符串中的两个\字符(从左边开始遇到的第一个字符)精确匹配,以/替换它们。进行\\{2}无效,因为它只能将两个反斜杠匹配在一起。.我已经尝试过\\.+?\\,但是可以匹配它们之间的整个子串。
我是regexp的新手,在各个站点上发现的任何内容都没有帮助我解决此问题。而且我知道我可以通过运行两次的for循环来做到这一点,但是我首先想知道是否可以使用regexp更好地完成它。

编辑:我正在做这样的事情:
IN \aaa\bbb(d\c)
OUT /aaa/bbb(d\c)

1 个答案:

答案 0 :(得分:2)

您可以使用

$s -replace '\\([^\\]+)\\','/$1/'

enter image description here

在这里,\\([^\\]+)\\匹配\,然后匹配并将\以外的任何1+个字符捕获并捕获到组1中(以后从替换模式中访问$1)然后匹配\,并将匹配项替换为/,即组1和/中的值。

要仅替换第一次出现的情况,可以使用

$s -replace '(?s)\\([^\\]+)\\(.*)','/$1/$2'

,结尾的(.*)会将字符串的其余部分(如果有)捕获到组2中,而$2替换后向引用会将字符串的该部分粘贴回结果中。 (?s)将允许.匹配默认情况下不匹配的换行符。