Home > Back-end >  Powershell: Regex matching with Get-content -Raw flag results in empty results
Powershell: Regex matching with Get-content -Raw flag results in empty results

Time:09-23

Solution was adding (?ms) to the front of my regex query

I am trying to search for chunks of text within a file, and preserving the line breaks in a chunk.

When I define my variable as $variable = get-content $fromfile, my function (below) is able to find the text I'm looking for but it is difficult to parse further due to a lack of line breaks

function FindBetween($first, $second, $importing){

    $pattern = "$first(.*?)$second"
    
    $result = [regex]::Match($importing, $pattern).Groups[1].Value

    return $result
}

when I define my variable as $variable = get-content $fromfile -raw, the output of my query is blank. I'm able to print the variable, and it does preserve the line breaks.

I run into the same issue regardless of if I add \r\n to the end of my pattern, if I use @() around my variable definition, if I use -Delimiter \n, or any combination of all those.

Whole code is here:

param($fromfile)

$working = get-content $fromfile -raw

function FindBetween($first, $second, $importing){

    $pattern = "(?ms)$first(.*?)$second"
    
    $result = [regex]::Match($importing, $pattern).Groups[1].Value
    #$result = select-string -InputObject $importing -Pattern $pattern

    return $result
}


FindBetween -first "host ####" -second "#### flag 2" -importing $working | Out-File "testresult.txt"

the file I'm testing it against looks like:

#### flag 1 host ####

stuff in between

#### flag 2 server ####

#### process manager ####



As to why I'm doing this:
I'm trying to automate taking a file that has defined sections with titles and outputting the content of those separate sections into a .csv (each section is formatted drastically different from each other). These files are all uniform to each other, containing the same sections and general content.

CodePudding user response:

If you're doing -raw you probably need to change your RegEx to "(?ms)$first(.*?)$second" so that . will match new lines.

  • Related