我有一個包含 3 個名稱條目的文本檔案:
# dot_test.txt
001 AALTON, Alan .....25 Every Street
006 JOHNS, Jason .... 3 Steep Street
002 BROWN. James .... 101 Browns Road
我的任務是找到 NAME 的實體。當它應該是 NAME 時,使用以下內容:
Select-String -AllMatches -Path $input_path -Pattern '(?s)[A-Z]{3}.*?\D(?=\s|$)' -CaseSensitive |
ForEach-Object { if($_.Matches.Value -match '\.$'){$_.Matches.Value -replace '\,$'} }
輸出是:
BROWN.
結論是這個腳本塊標識了 NAME 的實體。但未能進行更換。
任何有關如何實作這一目標的建議將不勝感激。
uj5u.com熱心網友回復:
$_.Matches.Value -replace '\,$'
這會嘗試用空字串(由于缺少第二個替換運算元)替換 ( ) 匹配末尾的a ,(您不需要轉義為) ,即它會有效地洗掉尾隨.\,$,
但是,鑒于您的匹配項包含 no,并且您希望將其尾隨替換.為,,請使用以下內容:
$_.Matches.Value -replace '\.$', ',' # -> 'BROWN,'
uj5u.com熱心網友回復:
您可以-replace直接使用,如果您需要替換字串末尾的逗號和點,請使用[.,]$正則運算式:
Select-String -AllMatches -Path $input_path -Pattern '(?s)[A-Z]{3}.*?\D(?=\s|$)' -CaseSensitive | % {$_.Matches.Value -replace '\.$', ','}
詳情:
(?s)[A-Z]{3}.*?\D(?=\s|$)- 火柴(?s)-RegexOptions.Singleline開啟模式并且.可以匹配換行符[A-Z]{3}- 三個大寫 ASCII 字母.*?- 盡可能少的任何零個或多個字符\D- 任何非數字字符(?=\s|$)- 與緊跟空格或字串結尾的位置匹配的正向前瞻。
\.$模式匹配.字串末尾的a 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/474166.html
