如何在Powershell中提取子字符串

时间:2019-06-10 17:27:08

标签: powershell

我有多个字符串。它们将类似于

DEVSRC\2019\REL\19-REL-07\Sales\CustomerFlow\company.Presales.CustomerFlow.Web.UI.CustomerMobile\App_Themes\Bundles

DEVSRC\2019\REL\19-REL-07\Policy\XPM\Insured\company.PolicyManagement.WebSite.Customer.Components\content

在powershell中,我需要从一开始就删除“ DEVSRC\2019\REL\19-REL-07\” 和 “公司。?。?。?”之后的所有内容

我刚接触Power Shell,已经尝试了几天

我尝试过修剪,子串等,但注意到似乎可行。

输出应为

$mystring = "Sales\CustomerFlow\company.Presales.CustomerFlow.Web.UI.CustomerMobile"

mystring = "Policy\XPM\Insured\company.PolicyManagement.WebSite.Customer.Components"

2 个答案:

答案 0 :(得分:1)

如果\个字符的数量是可以预见的,则可以使用-Split-Join使其更加整洁。

$s = "DEVSRC\2019\REL\19-REL07\Sales\CustomerFlow\company.Presales.CustomerFlow.Web.UI.CustomerMobile\App_Themes\Bundles"
($s -split "\\")[4..6] -join '\'

答案 1 :(得分:1)

这使用命名的捕获组和惰性捕获,该捕获在\之后的第一个\companies.之前停止,以获取文本的所需部分。这是脆弱,它取决于非常特定的模式,但是您的两个样本适合该模式。 [咧嘴]

$InStuff = @'
DEVSRC\2019\REL\19-REL-07\Sales\CustomerFlow\company.Presales.CustomerFlow.Web.UI.CustomerMobile\App_Themes\Bundles
DEVSRC\2019\REL\19-REL-07\Policy\XPM\Insured\company.PolicyManagement.WebSite.Customer.Components\content
'@ -split [System.Environment]::NewLine

foreach ($IS_Item in $InStuff)
    {
    $Null = $IS_Item.Replace('DEVSRC\2019\REL\19-REL-07\', '') -match '(?<Wanted>.+\\company.+?)\\.+'

    $Matches.Wanted
    }

输出...

Sales\CustomerFlow\company.Presales.CustomerFlow.Web.UI.CustomerMobile
Policy\XPM\Insured\company.PolicyManagement.WebSite.Customer.Components