我的文件内容如下:
[Something1Something2]
- Interesting data 1
- Interesting data 2
[Something3]
- Interesting data 1
- Interesting data 2
[Something4]
- Interesting data 1
- Interesting data 2
我想使用spilled或其他一些我未知的命令来获取返回的部分,然后我可以像这样索引:
$myStringArray[0]
prints:
- Interesting data 1
- Interesting data 2
我试图通过使用正则表达式实现这一点,但没有运气:
"[Somthing1] somedata1 [Something2] somedate2" -split "\[(.*)\]"
我意识到这不是多线的,但是原理是相同的,仅用于测试。
如果我使用上述文件执行此操作以尝试使用多行:
$myfile = Get-Content .\test.txt
($myfile -split "\[.*\]")
我得到一个包含14个而不是3个条目的数组。
答案 0 :(得分:0)
我找到了一个解决方案,但不是一个很好的解决方案:
Function GetEntriesMatching($filename, $tagMatch)
{
Write-Host "Filename: $filename"
Write-Host "Tag: $tagMatch"
$regex = "\[.*($tagMatch).*\]"
Write-Host "Regex: $regex"
$Lines = Get-Content $filename
$Out = $False
$returnValue = @()
ForEach ($Line In $Lines)
{
If ($Line -match '\[.*\]') {$Out = $False}
If ($Out -eq $True) {$returnValue += "<br> $Line </br>"}
If ($Line -match $regex) {$Out = $True}
}
if($returnValue.Count -eq 0)
{
$returnValue += "<b>NO ENTRIES FOUND FOR $tagMatch</b>"
}
return $returnValue
}
如果有人有这样做的方式,我真的很想看到它:)。
亲切的问候
答案 1 :(得分:0)
试试这个正则表达式:
(?mi)^\[.*\]{1}\s
要导入文件,请尝试以下操作:
$myfile = [io.file]::ReadAllText(".\test.txt")
这会将文件作为单个值导入,而不是get-content返回的数组。
从那里你应该能够做到这一点:
[regex]::Split($myfile,"(?mi)^\[.*\]{1}\s")
这不包括拆分中的搜索字符串。
如果你想要包含搜索字符串,你需要我们一个前瞻,如下所示:
[regex]::Split($myfile,"(?=(?mi)^\[.*\]{1}\s)")