Powershell正则表达式删除键

时间:2016-08-03 21:33:05

标签: regex powershell

给出类似

的字符串

'指纹是:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678910111'

如何删除不是由A-Z 0-9组成的40个字符的所有文本?

目前我正在寻找字符串'指纹是:'并将其删除,但我觉得寻找40个字符的字母数字会更安全。

$foo = $foo -replace 'The fingerprint is: ',''

我希望这样的事情有效,但没有运气。

$foo = $foo -creplace '^[A-Z0-9]{40}',''

我也尝试过寻找符合

的字符
$foo = $foo -match '[A-Z0-9]{40}'

2 个答案:

答案 0 :(得分:4)

取决于一点,但如果它是40连续的,它是你可以使用的唯一40个字符串替换:

"The fingerprint is: ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678910111" -replace '.*([A-Z0-9]{40}).*', '$1'

注意:替换$ 1是对匹配组的引用。它不是PowerShell变量,故意用单引号编写,因此不会扩展。

答案 1 :(得分:2)

要匹配40个字符的字母数字而没有替换,这个

$foo = 'The fingerprint is: ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678910111';
$foo -Match '[A-Z0-9]{40}' | Out-Null;
Write-Output $matches[0];

打印

ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678910111
  • [A-Z0-9]是一个括号表达式,匹配任何包含的字符(-表示一系列值)
  • {40}匹配前一个元素40次
  • Out-Null会抑制-match运算符
  • 的布尔返回值