Dot-Net
從 PowerShell 中擷取命名組的語法是什麼regexr和G和Xregex類型加速器表達式?
該問題使用以下範例字元串:
$r = "20160112 11:26:39 UPDATE CMIS-NC.ABC.LA012345J.NAM/MOUSE, MICKEY J.SEX/M.RAC/W.DOB/19670601.PCA/A1.ARI/CRIM1234567.DNY/CONVICTED OF DISTRIBUTING THE PEACE.OCA/123456.SOR/LA.MIS/CONFIRM RECORD AT DISNEY STUDIOS 123-456-7890 OR PAGER 123-456-7890. 20160112 11:26:39 RESPONSE CMIS-NC.ACK 1234567890 CMIS-NC 123456 CMIS-NC 123456 20160112 11:26:31 . 20160112 11:26:39 INFO MSN of message to LEMS is <1234567890>. 20160112 11:26:39 RESPONSE CMIS-NC.MSG 1234567890 CMIS-NC 123456 NC2K AC1234 20160112 11:26:31 LA012345J CTL/ ATN/ 6L12345678901234567890EDP LA012345J ACCEPT MKE/EDP NAM//MOUSE, MICKEY J ARI/CRIM1234567 NRI/1234567890"可以使用 PowerShell 內置正則表達式擷取命名組,方法是在
$matches自動變數中引用它們:$updateRequestPattern = "(?<RequestDate>\d{8} \d{2}:\d{2}:\d{2}) (?<UpdateRequest>UPDATE CMIS-NC\.[A-Z]{3,4}\.LA012345J\..+)\n" $request = $r -match $updateRequestPattern $matches['RequestDate']但是如果我想使用
[regex]類型加速器呢?在那裡,
$matches自動變數將不起作用。我也不能做類似的事情[regex]::Groups['RequestDate'].Value(這會產生“無法索引到空數組。”錯誤)。任何人都可以完成這個範例(或提供另一個範例)來擷取命名組(從而展示如何
[regex]公開其他 .NET 方法)嗎?$updateRequestPattern = "(?<RequestDate>\d{8} \d{2}:\d{2}:\d{2}) (?<UpdateRequest>UPDATE CMIS-NC\.[A-Z]{3,4}\.LA036035J\..+)\n" $request = [regex]::Matches($r, $updateRequestPattern)
返回值是 MatchCollection,因此您可以對其進行索引,然後引用 groups 屬性,並從那里以相同的方式使用索引:
$request[0].Groups['RequestDate']
我沒有看到該模式不匹配(它在 Regex101.com 中匹配,並且在我提供的第一個範例中匹配)。
但是按照您的建議,然後進一步簡化,這將按照您的建議進行。
$s = "ABC123" $p = "(?<LetterPart>[A-Z]+)(?<NumberPart>\d+)" $result = [regex]::Matches($s, $p) $result[0].Groups['LetterPart'].Value $result[0].Groups['NumberPart'].Value謝謝!