使用Get-Content -Raw后PowerShell正则匹配返回空的解决方法
PowerShell提取带换行文本块:解决-Raw模式下正则匹配为空的问题
需求
提取文件中带换行的文本块,后续将结构统一但格式各异的文件内容拆分至CSV。
问题
使用$variable = Get-Content $fromfile时,自定义的FindBetween函数能定位到目标文本,但文本丢失换行符,无法满足后续解析需求;改用Get-Content $fromfile -Raw保留换行符后,正则匹配返回空结果,尝试添加\r\n、数组转换@()、指定-Delimiter \n等方法均未解决问题。
解决方法
在正则表达式开头添加(?ms)修饰符:
(?m):启用多行模式,让^和$匹配每行的开头与结尾(?s):启用单行模式,让.匹配包括换行符在内的所有字符
完整代码示例
param($fromfile) $working = Get-Content $fromfile -Raw function FindBetween($first, $second, $importing){ # 添加(?ms)修饰符适配多行带换行的文本匹配 $pattern = "(?ms)$first(.*?)$second" $result = [regex]::Match($importing, $pattern).Groups[1].Value # 也可使用Select-String实现,取消注释下方代码即可 # $result = (Select-String -InputObject $importing -Pattern $pattern).Matches.Groups[1].Value return $result } # 调用函数提取指定标识间的文本并保存 FindBetween -first "host ####" -second "#### flag 2" -importing $working | Out-File "testresult.txt"
测试文件内容
#### flag 1 host #### stuff in between #### flag 2 server #### #### process manager ####
内容的提问来源于stack exchange,提问作者Alex Smith
相关产品推荐
相关产品推荐

