正则表达式转换字符串另一个字符串powershell

时间:2014-04-11 10:59:49

标签: .net regex powershell

我有一个字符串,如下所示

$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")
}

但是我没有按预期得到结果,还有其他更好的方法吗

4 个答案:

答案 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