2016-11-07 4 views
0

Привета У меня есть файл форматизвлечения данных с помощью регулярных выражений

[stuff not needed]Type:A1[stuff not needed] 
[stuff not needed]Name:B1[stuff not needed] 
Row:Sampletext 
Row:Sampletext 
[stuff not needed]Type:A2[stuff not needed] 
[stuff not needed]Name:B2[stuff not needed] 
Row:Sampletext2 
Row:Sampletext2 
Row:Sampletext2 

Я использую в для извлечения данных.

Я использую что-то вроде Regex1|Regex2|Regex3 и сохраняю вывод в файл.

Выход поставляется в формате:

A1 
B1 
Sampletext 
Sampletext 
A2 
B2 
Sampletext2 
Sampletext2 
Sampletext2 

Я хочу это в формате

A1 B1 Sampletext 
A1 B1 Sampletext 
A2 B2 Sampletext2 
A2 B2 Sampletext2 
A2 B2 Sampletext2 

Я новичок в PowerShell, есть ли способ, что я могу это сделать?

Это точный код у меня есть:

$input_path = ‘idx.txt’ 
$output_file = ‘output.txt’ 
$regex = ‘Type:\s([A-Za-z]*)|Name:\s\s([A-Za-z]*)|[A-Za-z][a-z0-9A-Z_]*(?:\s*[0-6]\s*[0-4]\s\s[\s\d]\d\s*0)’ 
select-string -Path $input_path -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } > $output_file 

данные слишком велик, чтобы быть размещены здесь, но плохо просто создать выборочные данные set.But регулярные выражения работают, может быть грубым, но его захватив требуемые данные. для примера, мы можем иметь тип: ([A-Za-z] ) | Название: ([A-Za-z]) | Строка: ([A-Za-z] *) as регулярные выражения

+0

@wOxxOm I добавлено редактирование –

+0

дальше отредактировано, пожалуйста проверите теперь, если это помогает –

ответ

1

Проверяйте каждую строку, если она имеет type или name, и устанавливайте только соответствующие переменные, но если она содержит row, выведите переменные типа и имени вместе с содержимым текущей строки.

$allmatches = Select-String '(Type|Name|Row):\s*(\w*)' $input_path -allmatches 
$output = foreach ($m in $allmatches) { 
    $data = $m.Matches.Groups[2].Value 
    switch ($m.Matches.Groups[1].Value) { 
     'Type' { $type = $data; break } 
     'Name' { $name = $data; break } 
     'Row' { "$type $name $data" } 
    } 
} 
$output | Set-Content $output_path -Encoding UTF8 

Примечание:

  • Мы используем более быстрое foreachвыражение вместо медленнее конвейерного через Еогеасп с ScriptBlock.
  • \w в регулярном выражении означает любое слово характер, включая A-Za-z0-9 и _ и some more
  • Regex сопоставление и сравнение струны к регистру в чувствительной в PowerShell по умолчанию
+0

Большое спасибо, я использовал код. Аргумент select-string - это три регулярных выражения с трубками между справа? –

+0

, но я получаю следующую ошибку: «Невозможно индексировать нулевой массив. В строке: 6 символов: 23 + $ data = $ m.Groups [<<<< 2] .Value + CategoryInfo: InvalidOperation: (2 : Int32) [], RuntimeException + FullyQualifiedErrorId: NullArray " –

+0

любая идея, что может быть причиной этого –

Смежные вопросы