Powershell如何在之后或之前分割字符串('/')

时间:2018-03-17 04:56:29

标签: powershell

我有一个我想分开的用例。下面是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

3 个答案:

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