我有一个字符串,如下所示
$mystring="t={p:1,q:2,r:3}"
我想将此字符串转换为以下字符串
"t={'p':'1','q':'2','r':'3'}"
我如何在powershell中执行此操作
我试过的代码如下:
$list=[System.Text.RegularExpressions.Regex]::Matches($mystring,"[{:,]").Value
foreach($dicitem in $diclist)
{
$dic=$dic.Replace("$dicitem","$dicitem'")
}
$list=[System.Text.RegularExpressions.Regex]::Matches($dic,"[}:,]").Value
foreach($dicitem in $diclist)
{
$dic=$dic.Replace("$dicitem","'$dicitem")
}
但是我没有按预期得到结果,还有其他更好的方法吗
答案 0 :(得分:2)
$mystring -replace '(?<={.*)([a-z])|\d',("'{0}'" -f '$0')
答案 1 :(得分:2)
-replace运算符更容易。此解决方案使用反向引用而不是-f格式运算符。
编辑:最初误读了这个问题(错过了需要引用的字母。 更新解决方案:
$mystring="t={p:1,q:2,r:3}"
$mystring -replace '([^{,]+):([^,}])+',"'`$1':'`$2'"
t={'p':'1','q':'2','r':'3'}
答案 2 :(得分:1)
尝试这种方式:
$mystring -replace '(?<={.*)([^:,}])', ("'{0}'" -f '$1')
答案 3 :(得分:0)
替换正则表达式。搜索正则表达式:
(?<!\})(?!.*\{)
并替换为单引号'
正则表达式的解释:
NODE EXPLANATION
--------------------------------------------------------------------------------
(?<! look behind to see if there is not:
--------------------------------------------------------------------------------
\} '}'
--------------------------------------------------------------------------------
) end of look-behind
--------------------------------------------------------------------------------
(?! look ahead to see if there is not:
--------------------------------------------------------------------------------
.* any character except \n (0 or more times
(matching the most amount possible))
--------------------------------------------------------------------------------
\{ '{'
--------------------------------------------------------------------------------
) end of look-ahead