PowerShell从字符串中删除文本

时间:2013-10-03 20:16:54

标签: string powershell

在特定字符后删除字符串中所有文本的最佳方法是什么?在我的情况下,“=”和我的案例中的另一个角色,,但保持文字介于?之间?

示例输入

  

=保持这个,

5 个答案:

答案 0 :(得分:26)

另一种方法是使用运算符-replace

$teststring = "test=keep this, but not this."

$teststring -replace ".*=" -replace ",.*"

.*=表示任意数量的字符,包括等号。

,.*表示逗号后跟任意数量的字符。

由于您基本上删除了字符串的这两部分,因此您不必指定用于替换它们的空字符串。您可以使用多个替换,但请记住订单是从左到右。

答案 1 :(得分:4)

$a="some text =keep this,but not this"
$a.split('=')[1].split(',')[0]

返回

keep this

答案 2 :(得分:1)

这应该做你想要的:

C:\PS> if ('=keep this,' -match '=([^,]*)') { $matches[1] }
keep this

答案 3 :(得分:0)

我参考了上面的@ benjamin-hubbard的答案,以解析dnscmd的A记录的输出,并生成IP和主机名的PHP“字典” /键-值对。我将多个-replace参数串在一起,以不显示任何内容或使用 tab 替换文本以格式化PHP文件的数据。

$DnsDataClean = $DnsData `
    -match "^[a-zA-Z0-9].+\sA\s.+" `
    -replace "172\.30\.","`$P." `
    -replace "\[.*\] " `
    -replace "\s[0-9]+\sA\s","`t"

$DnsDataTable = ( $DnsDataClean | `
    ForEach-Object { 
        $HostName = ($_ -split "\t")[0] ; 
        $IpAddress = ($_ -split "\t")[1] ; 
        "`t`"$IpAddress`"`t=>`t'$HostName', `n" ;
    } | sort ) + "`t`"`$P.255.255`"`t=>`t'None'"

"<?php
`$P = '10.213';
`$IpHostArr = [`n`n$DnsDataTable`n];

?>" | Out-File -Encoding ASCII -FilePath IpHostLookups.php

Get-Content IpHostLookups.php

答案 4 :(得分:0)

这确实很老,但是我想为可能偶然发现此问题的其他人添加些微变化。正则表达式是强大的功能。

要保留介于等号和逗号之间的文本:

https://pos.api.here.com/positioning/v1/locate?app_id={YOUR_APP_ID}&app_code={YOUR_APP_CODE}

此正则表达式从行首开始,擦除所有字符直到第一个等号,捕获每个字符直到下一个逗号,然后擦除每个字符直到行尾。然后,它将整个行替换为捕获组(括号内的所有内容)。它将匹配包含至少一个等号和至少一个逗号的任何行。它与Trix的建议相似,但是与该建议不同,这将不会匹配仅包含等号或逗号的行,而行必须同时包含两者。