Powershell RegEx:从特定字符获取内容

时间:2018-03-28 10:59:07

标签: regex powershell

我尽我所能,但RegEx对我来说仍然是一种折磨。

我们假设我有以下字符串:

  

a =这是一个应用程序o =这是一个对象grp =这是一个组

我需要一个regEx,它将“a =”,“o =”和“grp =”之后的内容保存到变量中:

  

$ a =“这是一个应用程序”
$ $ =“这是一个对象”
$ grp =“这是一个群组”

如何做到这一点?
提前多多谢谢

3 个答案:

答案 0 :(得分:2)

这项工作已经过测试。

$s = "a=this is an application o=this is an object grp=this is a group"
if($s -match 'a=(?<a>[^=]*)=(?<o>[^=]*)=(?<grp>[^=]*)')
{
    Write-Host "$"
    $a = $Matches.a.substring(0,$Matches.a.length-2)
    $o = $Matches.o.substring(0,$Matches.a.length-4)
    $grp = $Matches.grp
}
Write-Host ">> a: [$a]" 
Write-Host ">> o: [$o]"
Write-Host ">> grp: [$grp]" 

提示是使用(?)按名称识别捕获的字符串,并在字符等于=时使用[^ =] *停止搜索。

第一个字符串包含以下变量的名称,因此我使用SUBSTRING()函数将其删除。

当然,当字符串值包含相等字符时会出现问题:-) 如果存在这种情况,我认为REGEX不是一个好的解决方案。

拆分解决方案是更好的解决方案

$s = "a=this is an application o=this is an object grp=this is a group"
$x,$a,$o,$grp = $s -split("a=| o=| grp=")
Write-Host ">> a: [$a]" 
Write-Host ">> o: [$o]"
Write-Host ">> grp: [$grp]" 

并且在这种情况下更简单。

答案 1 :(得分:0)

试试这个(?:.=([a-zA-Z\s]*[^\w=]))|(?:.+=([a-zA-Z\s]*))

答案 2 :(得分:0)

这将为每个值创建变量。

$Split具有以下值:

a=
this is an application 
o=
this is an object 
grp=
this is a group 

使用替换方法删除=的简单Do / while循环允许我们创建变量:

$String = 'a=this is an application o=this is an object grp=this is a group'
$Split = $String -split "(\w{1,3}[=])"
$Count = $Split.Count
$c = 1

do
{
    New-Variable -Name ($Split[$c].replace("=","").Trim()) -Value ($Split[$c + 1].Trim()) -Force
    $c = $c + 2
}

Until ($c -eq $count)