我有一个我想分开的用例。下面是txt文件中程序的输出。我需要单独将VALUE部分写入另一个txt文件中以供另一个进程读取。
输出:“Id”:“/姓名/值”,
我试过
$text.split('/')[1].split(' ')
但它导致给我“姓名”
总的来说,我在做什么
$text = Get-Content C:\temp\file.txt
$text.split('/')[1].split(' ') | Out-File C:\temp\file1.txt
答案 0 :(得分:1)
一步一步地看看结果,你会看到
PS C:\> 'OUTPUT: "Id": "/Name/VALUE",'.Split('/')
OUTPUT: "Id": "
Name
VALUE",
第一行是索引0,第二行(Name)是索引1,第三行(VALUE“,)是索引2.
你可以通过以下方式获得价值:
$text.Split('/')[2].Replace('",', '')
取值框并删除引号和逗号。
答案 1 :(得分:0)
方法1,带分隔符数组:
$content.split(@('"', '/'))[5]
具有多重分割的方法2:
$content.split('"')[3].Split('/')[2]
答案 2 :(得分:0)
使用仅基于PowerShell自己的-split
和-replace
运营商的解决方案来补充TessellatingHeckler's helpful answer:
PS> ('OUTPUT: "Id": "/Name/VALUE"' -split '/')[-1] -replace '"'
VALUE
数组索引-1
从/
数组中提取 last 元素 - -split '/'
输出的分隔标记,-replace '"'
然后删除任何来自结果的"
个实例(在没有替换字符串的情况下,用空字符串替换它们,从而有效地删除它们。)
借助正则表达式(正则表达式),单独使用-replace
就足够了:
PS> 'OUTPUT: "Id": "/Name/VALUE"' -replace '.*/(.*?)"', '$1'
VALUE
.*/
贪婪地匹配 last /
(.*?)"
非贪婪地匹配所有内容,直到遇到"
为止;由于.*?
包含在(...)
中,因此它是一个所谓的捕获组,可使替换字符串中的子匹配可用为$1
。