我尽我所能,但RegEx对我来说仍然是一种折磨。
我们假设我有以下字符串:
a =这是一个应用程序o =这是一个对象grp =这是一个组
我需要一个regEx,它将“a =”,“o =”和“grp =”之后的内容保存到变量中:
$ a =“这是一个应用程序”
$ $ =“这是一个对象”
$ grp =“这是一个群组”
如何做到这一点?
提前多多谢谢
答案 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)