我如何制作一个正则表达式来给我名字
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
我需要从命令中获取显示名称结果,它看起来像以下截断的结果。
如下图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
运算符变体。
- 注意:由于PowerShell一般,
-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