我對如何獲取下面字串中的數字感到困惑。我制作了一個正則運算式
$regex = '(?s)^. \bTotal Members in Group: ([\d.] ).*$'
我只需要2一行讀取的長字串中 的數字部分Total Members in Group: 2。
我$regex回到了我的整條生產線,但我真正需要的是數字。
號碼是隨機的
uj5u.com熱心網友回復:
cls
$string = 'Total Members in Group: 2'
$membersCount = $string -replace "\D*"
$membersCount
還有一種方法:
cls
$string = 'Total Members in Group: 2'
$membersCount = [Regex]::Match($string, "(?<=Group:\s*)\d ").Value
$membersCount
uj5u.com熱心網友回復:
Fors1k 的有用答案顯示了繞過捕獲組 ( (...))需求的優雅解決方案-它們是問題中特定示例的最佳解決方案。
要回答有關如何在需要捕獲組時提取子字串 的一般問題,PowerShell 慣用的方法是:
要么: 使用
-match,正則運算式匹配運算子與單個輸入字串:如果-match操作回傳$true,自動$Matches變數反映正則運算式捕獲的內容,屬性(鍵)0包含完整匹配,1第一個捕獲組的匹配等。$string = 'Total Members in Group: 2' if ($string -match '(?s)^.*\bTotal Members in Group: (\d ).*$') { # Output the first capture group's match $Matches.1 }- 筆記:
-match只在輸入中查找一個匹配項。需要直接使用底層 .NET API 來查找所有匹配項,通過
[regex]::Matches()- 請參閱此答案以獲取示例。雖然
-match僅填充$Matches了單一輸入字串(使用陣列,它作為一個過濾器,并回傳匹配輸入字串的子陣列),您可以使用switchwith陳述句-Regex申請-match行為的陣列輸入字串; 這是一個簡化的示例(輸出'1', '2', '3'):switch -Regex ('A1', 'A2', 'A3') { 'A(.)' { $Matches.1 } }
- 筆記:
或者:使用
-replace時,基于正則運算式的字串替換操作,以匹配整個輸入字串,并用什么捕獲關注組(一個或多個)拍攝的參考更換; 例如,$1指的是第一個捕獲組的值。$string = 'Total Members in Group: 2' $string -replace '(?s)^.*\bTotal Members in Group: (\d ).*$', '$1'- 筆記:
-replace,與 不同-match,查找輸入中的所有匹配項-replace還支持陣列的輸入串的,在這種情況下,每個陣列元素單獨處理(-match不過,但在這種情況下它不未填充$Matches;如所述的,switch可以彌補這一點)。- 一個警告再
-replace是,如果正則運算式并沒有匹配,回傳輸入字串原樣
- 筆記:
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/323321.html
上一篇:從提升的腳本訪問用戶環境變數?
