我有一个看起来像这样的文件:

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'}

使用“临床诊断”作为定界符,无需一次读取所有数据并立即解析/捕获多个匹配项。

07-27 18:13