我正在尝试匹配事件,其中判断事件何时开始和结束的唯一方法是使用多行事件中的标题或第一个值(例如 START--)。基本上,使用标题作为结束 anchor 来获取整个事件。另外,最后一个事件将在文件末尾结束,因此该事件没有 anchor 。我不太确定如何进行这项工作。
事件示例(行与行之间没有空格)
START--random stuff here
more random stuff on this new line
more stuff and things
START--some random things
additional random things
blah blah
START--data data more data
START--things
blah data
$FileContent | select-string '^START--(.*?)^START--' -AllMatches | Foreach {$_.Matches} | Foreach {$_.Value}
最佳答案
您可以将文件读入单个变量(例如,可以通过将 -Raw
选项传递给 Get-Content
来完成)并在以 START--
开头的行开头,但第一行:
$contents = Get-Content 'your_file_path' -Raw
$contents -split '(?m)^(?!\A)(?=START--)'
正则表达式详细信息
(?m)
- 多行选项打开^
- 现在,由于(?m)
,它匹配行的开头
(?!\A)
- 不是整个字符串/文本的开头(?=START--)
- 紧随START--
子字符串的位置。
关于regex - 仅使用起始值匹配多行事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57417368/