在 Atom 中,如果我将Ctrl-F与正则表达式一起使用,它将突出显示正则表达式的所有匹配项,例如
文件:
aaa
b
ccc
d
e
f
gg
查询:
[a-z]{2,}
突出显示的文本:
aaa
ccc
gg
但是我还没有找到在PowerShell中执行此操作的cmdlet
预期输入/输出:
$var = @"
aaa
b
ccc
d
e
f
gg
"@
$var -find "[a-z]{2,}"
#Output
aaa
ccc
gg
有没有办法做到这一点?
您要查找的是
$regex = [regex]'[a-z]{2,}'
$regex.Matches($var).value
解释:
正如在评论中一样,我建议你使用正则表达式查看Powershell,在字符串中找到一个字符串,其中答案演示了[regex]
的数据类型.match
方法。不幸的是,这只抓取正则表达式的第一个结果,并不意味着多个结果,但是,matches
会得到多个结果,因为它是匹配的复数形式:
.match
:
# Define a regex query
$regex = [regex]'[a-z]{2,}'
# Define your variable
$var = @"
aaa
b
ccc
d
e
f
gg
"@
# Query $var
$regex.match($var)
#output
Groups : {0}
Success : True
Name : 0
Captures : {0}
Index : 0
Length : 3
Value : aaa
如您所见,这只会得到aaa
并提供其他数据,例如它在哪个组中,是否成功以及其他信息。
但是,如果我们做同样的事情但使用matches
方法,它将获得所有 3 个结果:
$regex.matches($var)
#output
Groups : {0}
Success : True
Name : 0
Captures : {0}
Index : 0
Length : 3
Value : aaa
Groups : {0}
Success : True
Name : 0
Captures : {0}
Index : 6
Length : 3
Value : ccc
Groups : {0}
Success : True
Name : 0
Captures : {0}
Index : 16
Length : 2
Value : gg
显示所有三个结果的信息。但是,如果我们想将结果缩小到仅值,我们可以获取变量的值标签,例如
$regex.Matches($var).value
#output
aaa
ccc
gg
这是(我从你的问题中假设(你想要的。
您可以使用Select-String
来获取所需的输出:
$var = @"
aaa
b
ccc
d
e
f
gg
"@
$var -split 'rn' | Select-String -Pattern "[a-z]{2,}"
输出:
aaa
ccc
gg