2017-08-11 138 views
0

我有以下代碼:PowerShell的:無法識別的轉義序列

$BuildDetails = Get-Content "d:\BuildDetails.txt" 

[regex]$BuildDetailsRY = '\bRY:\s+\K\S+' 
[regex]$BuildDetailsRoY = '\bRoY:\s+\K\S+' 
[regex]$BuildDetailsSP = '\bSP:\s+\K\S+' 
[regex]$BuildDetailsRC = '\bRC:\s+\K\S+' 
[regex]$BuildDetailsBranch = '\bBranch:\s+\K\S+' 

$ReleaseYear = $BuildDetails | Select-String $BuildDetailsRY -AllMatches | Foreach-Object {$_.Matches} | 
     Foreach-Object {$_.Groups[2].Value} 

Write-Host Release Year = $ReleaseYear 

當我運行它,我得到以下錯誤: 無法轉換值「\ BSP:\ S + \ķ\ S +」輸入「系統.Text.RegularExpressions.Regex」。錯誤:「解析」\ bSP:\ s + \ K \ S +「 - 無法識別的轉義序列\ K」。

這是文本文件,它拜訪。

RY: 17 
RoY: 2 
SP: 0 
RC: 1 
Branch: $/Release/17.2.x 

我想要的正則表達式做的是找到標題例如後的數據17

+0

是的,你的正則表達式是無效和錯誤消息反映。 '\ k'需要尖括號和名稱,以及具有該名稱的前一個捕獲組,它是[一個命名的反向引用](https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular -expression-language-quick-reference)或者大寫字母中沒有任何內容。你在問什麼?你想要匹配什麼?\ K'?你的意思是'\\ K'爲文字反斜槓-K? – TessellatingHeckler

+0

@TessellatingHeckler我在文本文件中添加了更多關於它正在搜索的內容的詳細信息。我用我的文本文件在[鏈接](https://regex101.com/)上測試了正則表達式,它工作正常。 –

+0

Regex101.com很有用,但它只能處理四個正則表達式引擎(PCRE - Perl兼容的Regex引擎,GoLang,Python和JavaScript)。 .Net又是不同的,它自己的正則表達式引擎。非常適合基礎知識,但PCRE和.Net不同。像http://regexhero.net/tester/或http://regexstorm.net/tester可以在線執行.Net正則表達式 - 但是,PowerShell可以執行.Net正則表達式,所以它們只告訴你它告訴你的相同內容。 – TessellatingHeckler

回答

0

我已經找到了更好的方法到底:

$BuildDetails = Get-Content "D:\BuildDetails.txt" 

[regex]$BuildDetailsRY = '(?<=RY:).*?(?=\s)' 
[regex]$BuildDetailsRoY = '(?<=RoY:).*?(?=\s)' 
[regex]$BuildDetailsSP = '(?<=SP:).*?(?=\s)' 
[regex]$BuildDetailsRC = '(?<=RC:).*?(?=\s)' 
[regex]$BuildDetailsBranch = '(?<=Branch:).*' 

$ReleaseYear = [regex]::matches($BuildDetails, $BuildDetailsRY) 
$ReleaseofYear = [regex]::matches($BuildDetails, $BuildDetailsRoY) 
$SP = [regex]::matches($BuildDetails, $BuildDetailsSP) 
$RC = [regex]::matches($BuildDetails, $BuildDetailsRC) 
$Branch = [regex]::matches($BuildDetails, $BuildDetailsBranch)