Ctrl-F就像Powershell中的正则表达式一样?



在 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

最新更新