我有一个看起来像这样的文件:
SPECIMEN: Procedure: xxxx1 A) Location: yyyy2
Major zzz B) Location: something
text here C) more
CLINICAL DIAGNOSIS: xyz
换行符是
CR
然后是LF
。我正在尝试使正则表达式从
Procedure:
的末尾读取到CLINICAL DIAGNOSIS
的开始,但是在读取多行时遇到问题。这是我所拥有的:
$input_file = 'c:\Path\0240188.txt'
$regex = ‘(?m)^SPECIMEN: Procedure: (.*)CLINICAL DIAGNOSIS:’
select-string -Path $input_file -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value }
不会返回任何东西。
如果我将行更改为:
$regex = ‘(?m)^SPECIMEN: Procedure: (.*)’
它捕获了第一行,但没有捕获。我以为
(?m)
应该为我抓了多行。有小费吗?
最佳答案
试试这个:
$regex = '(?ms).*SPECIMEN: Procedure:(.+)CLINICAL DIAGNOSIS: '
Get-Content $input_file -Delimiter 'CLINICAL DIAGNOSIS: '|
foreach {@($_) -match 'CLINICAL DIAGNOSIS: ' -replace $regex,'$1'}
使用“临床诊断”作为定界符,无需一次读取所有数据并立即解析/捕获多个匹配项。