如何在此字符串中添加引号

how to add quotes in this string

我有这个字符串

[{listenport:443,connectaddress:10.1.10.20,connectport:443,firewallrulename:port443,direction:Inbound,action:Allow,protocol:TCP},{listenport:80,connectaddress:10.1.10.20,connectport:80,firewallrulename:port80,direction:Inbound,action:Allow,protocol:TCP}]

我想知道如何编写一个函数将其转换为

[{"listenport":"443","connectaddress":"10.1.10.20","connectport":"443","firewallrulename":"port443","direction":"Inbound","action":"Allow","protocol":"TCP"},{"listenport":"80","connectaddress":"10.1.10.20","connectport":"80","firewallrulename":"port80","direction":"Inbound","action":"Allow","protocol":"TCP"}]

我尝试过使用 insert 和 indexof ,但不知道如何处理整个字符串

如果你真的必须使用这种格式并且不能生成 well-formed JSON 开始,至少在你的示例输入中 属性 名称和值都是仅由. 或属于 \w 正则表达式类别的字符,因此可以进行单个 -replace 操作:

@'
[{listenport:443,connectaddress:10.1.10.20,connectport:443,firewallrulename:port443,direction:Inbound,action:Allow,protocol:TCP},{listenport:80,connectaddress:10.1.10.20,connectport:80,firewallrulename:port80,direction:Inbound,action:Allow,protocol:TCP}]
'@ -replace '[\w.]+', '"$&"'

结果是 well-formed JSON,您可以将其通过管道传输到 ConvertFrom-Json 以在 PowerShell 中进行 OO 处理。


如果您只能假设 属性 名称 仅由 \w 个字符组成:

@'
[{listenport:443,connectaddress:10.1.10.20,connectport:443,firewallrulename:port443,direction:Inbound,action:Allow,protocol:TCP},{listenport:80,connectaddress:10.1.10.20,connectport:80,firewallrulename:port80,direction:Inbound,action:Allow,protocol:TCP}]
'@ -replace '(\w+):', '"":"' -replace '\}|(?<!\}),', '"$&'

最终使用 replace

破解了它
$proxyinfosjson = $proxyinfosjson.Replace(',', '","').Replace('{', '{"').Replace('}', '"}').replace(':', '":"').Replace('}"', '}').Replace('"{', '{')

太丑了..不以此为荣..但有效..