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

问题描述 投票:0回答:3

我有一个我想分开的用例。下面是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
powershell
3个回答
1
投票

一步一步地看看结果,你会看到

PS C:\> 'OUTPUT: "Id": "/Name/VALUE",'.Split('/')
OUTPUT: "Id": "
Name
VALUE",

第一行是索引0,第二行(Name)是索引1,第三行(VALUE“,)是索引2。

您可以通过以下方式获得VALUE:

$text.Split('/')[2].Replace('",', '')

取值线并删除引号和逗号。


0
投票

方法1与分隔符数组:

$content.split(@('"', '/'))[5]

方法2多分裂:

$content.split('"')[3].Split('/')[2]

0
投票

使用仅基于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
© www.soinside.com 2019 - 2024. All rights reserved.