我如何制作一个正则表达式来给我名字

How do I make a regex to give me the name

我需要从命令中获取显示名称结果,它看起来像以下截断的结果。 如下图name:

$Group = gam info <Group Email> nousers noaliases

$Group
Group: <Group Email> 
  Group Settings:
    id: 020------v1
    name: email.admin@domain.com
    description:
    directMembersCount: 3

我很确定我需要用正则表达式来做这个,但我不确定如何制作正则表达式

然后,一旦我有了正则表达式,我就不确定如何使用它从 $group

中获取名称

答案是

$GroupName = gam info group $GroupEmail nousers noaliases
$groupname = ($groupname -match 'Name:').Trim() | ConvertFrom-String -Delimiter ':' | Select-Object P2

$GroupName = gam info group $GroupEmail nousers noaliases
$GroupName = $GroupName -match ('Name:')
$GroupName = $GroupName.trim().Split(' ')[1]

如果有人能回答得更好,请这样做。

一行似乎行得通

$GroupName = ((gam info group $GroupEmail nousers noaliases) -match ('Name:')).trim().Split(' ')[1]

更简洁一点(也更健壮):

(gam info group $GroupEmail nousers noaliases) -match '^\s+name:' -replace '^.+: '
  • Regex ^\s+name: , applied via the -match 运算符,匹配输出中以 (^) 一个或多个 (+) 开头的所有行(在本例中为一个)空白字符 (\s),后跟逐字 name:

    • 注意:由于PowerShell一般,-match默认是case-insensitive;对于 case-sensitive 匹配,使用 -cmatch 运算符变体。
  • -replace 运算符的应用然后有效地删除了 [1] 行开头的所有内容 ^ 然后是一个或多个 (+) 个字符,无论它们是什么 (.),然后逐字 : ,返回该行的其余部分,即 属性 .


[1] 通过不向 -replace(可选的第二个 RHS 操作数)提供替换操作数,任何匹配的内容都将隐式替换为 空字符串,从而有效地 删除了 .

如果您需要从该命令中获取适当的对象,这在将来可能会有用:

function Parse-GamInfo {
    (@($input) -notmatch 'Group Settings:').foreach{
        begin { $obj = @{} }
        process {
            $prop, $val = $_.Split(':').Trim()
            $obj[$prop] = $val
        }
        end {
            [pscustomobject]$obj
        }
    }
}

现在您可以通过管道将您的命令传递给此函数以获得易于操作的对象:

PS /> gam info <Group Email> nousers noaliases | Parse-GamInfo

Group         description name                   id          directMembersCount
-----         ----------- ----                   --          ------------------
<Group Email>             email.admin@domain.com 020------v1 3