2016-08-03 93 views
1

鑑於像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}' 

回答

3

的字符取決於一點,但如果是40個連續,它是你可以使用替換隻有40個字符的字符串:

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

注意:替換$ 1是對匹配組的引用。它不是PowerShell變量,故意用單引號引起來,所以不會擴展。

+0

的布爾返回值,如果它是唯一* * 40字符串,跳過正則表達式和'「指紋是:ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678910111」 .split()|?長度 - 等於40' – TessellatingHeckler

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操作
+0

可愛的簡潔的例子,但請注意\ w也匹配下劃線(_)。 –

+0

@ChrisDent很高興知道[\ w](https://msdn.microsoft.com/en-us/library/20bw873z(v = vs.110).aspx),謝謝! – Bryan