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