Я пытаюсь извлечь определенный блок строк из текстового файла, который содержит что-то вроде этого:Multiline матч регулярного выражения в PowerShell
...
sCountry = "USA"
sCity = "New York"
sState = "New York"
...
sCountry = "USA"
sCity = "Los Angeles"
sState = "California"
, где эти три строки повторяется на протяжении текстового файла; Я просто хочу, чтобы извлечь эти строки текста, и положить поля данных в формате CSV, так что у меня есть что-то вроде
"USA","New York","New York"
"USA","Los Angeles","California"
...
До сих пор у меня есть это:
$inputPath = 'C:\folder\file.vbs'
$outputFile = 'C:\folder\extracted_data.csv'
$fileContent = [io.file]::ReadAllText($inputPath)
$regex = '(?sm)(s[A-Z][a-z]+ = "\w*"(\s*$)){3}'
$fileContent = $fileContent | Select-String $regex -AllMatches | % {$_.Matches} | % {$_.Value}
$fileContent = [regex]::Replace($fileContent, 'sCountry = ', '')
$fileContent = [regex]::Replace($fileContent, '(?sm)((^\s*)s[A-Z][a-z]+ =)', ',')
$fileContent > $outputFile
который я был в состоянии получите, посмотрев на это:
Multiline regex to match config block.
Однако мой выходной файл пуст, когда я запускаю скрипт. Это не будет шаблон матча с $regex
рисунком я представил, но он будет соответствовать на одной строке, если я что-то вроде:
$regex = '(?sm)(sCountry = "\w*"(\s*$))'
но если я что-то вроде:
$regex = '(?sm)(s[A-Z][a-z]+ = "\w*"(\s*$))'
Как создать сопоставление шаблонов по нескольким строкам?
Какую версию powershell вы используете? – mjolinor
@mjolinor, Windows PowerShell ISE, 3.0, NOT (x86) – cerremony