Извлечь определенную множественную строку из строк через регулярное выражение

Какими персонажами вы должны и которые вы не должны убежать, действительно зависит от того, с чем вы работаете.

Для PCRE и большинства других так называемых Perl-совместимых ароматов избегайте этих внешних классы символов:

.^$*+?()[{\|

и эти внутренние классы символов:

^-]\

Для POSIX расширенных регулярных выражений (ERE), избегайте этих внешних классов символов (таких же, как PCRE):

.^$*+?()[{\|

Выключение любых других символов является ошибкой с POSIX ERE.

Внутри классов символов обратная косая черта является буквальным символом в регулярных выражениях POSIX. Вы не можете использовать его, чтобы избежать чего-либо. Вы должны использовать «умное размещение», если хотите включить метасимволы класса символов в виде литералов. Поместите ^ в любом месте, кроме как в начале, в начале, а в начале или в конце класса символов, чтобы соответствовать этим буквально, например:

[]^-]

В основных регулярных выражениях POSIX (BRE), это метасимволы, которые вам нужно убежать, чтобы подавить их смысл:

.^$*

Выпуски из круглых скобок и фигурных скобок в BRE дают им особый смысл, который их неописуемые версии имеют в ERE. Некоторые реализации (например, GNU) также придают особое значение другим символам при экранировании, например \? и +. Сброс символа, отличного от. ^ $ * () {}, Как правило, является ошибкой с BRE.

Внутри классов символов BRE следуют тому же правилу, что и ERE.

Если все это делает голова спина, возьмите копию RegexBuddy . На вкладке «Создать» нажмите «Вставить маркер», а затем «Литерал». RegexBuddy добавит экраны при необходимости.

2
задан Arbelac 28 February 2019 в 08:29
поделиться

3 ответа

Использование лучшего паттерна

 $Pattern = '^Backup-ID|^Policy|^Primary Copy|^Expires|^Copy Number|^Fragment Size|^Expires|^MediaID'

и RegEx для разделения выходного сигнала на Backup-ID

(Get-Content .\test.txt|Select-String -Pattern $Pattern|Out-String) -split "(?=Backup-ID)"|ForEach-Object {
    ((

Использование лучшего паттерна

[110]

и RegEx для разделения выходного сигнала на Backup-ID

[111] <час>
hostname01,VM_weekly,23,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX122,3,6188832,1/5/2024 3:19:13 AM,XXX134
hostname02,VM_weekly2,24,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX244,3,6188832,1/5/2024 3:19:13 AM,XXX199,4,6188832,1/5/2024 3:19:13 AM,XXX177
-split "`r?`n" | %{(

Использование лучшего паттерна

[110]

и RegEx для разделения выходного сигнала на Backup-ID

[111] <час>
hostname01,VM_weekly,23,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX122,3,6188832,1/5/2024 3:19:13 AM,XXX134
hostname02,VM_weekly2,24,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX244,3,6188832,1/5/2024 3:19:13 AM,XXX199,4,6188832,1/5/2024 3:19:13 AM,XXX177
-split ":\s+",2)[1]}) -join ',').Trim(',') }
<час>
hostname01,VM_weekly,23,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX122,3,6188832,1/5/2024 3:19:13 AM,XXX134
hostname02,VM_weekly2,24,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX244,3,6188832,1/5/2024 3:19:13 AM,XXX199,4,6188832,1/5/2024 3:19:13 AM,XXX177
0
ответ дан LotPings 28 February 2019 в 08:29
поделиться

Это может быть?

& {
    $current = $null
    switch -regex -file 'C:\text.txt' {
        '^(Backup-ID|Policy|Primary Copy|Expires|Copy Number|Fragment Size \(KB\)|Expires|MediaID):\s+(.*)' {
            if ($matches[1] -eq "Backup-ID") {
                if ($current) { $current.ToString() }
                $current = [Text.StringBuilder]::new()
                [void]$current.Append($matches[2])
            }
            else {
                [void]$current.Append(",").Append($matches[2])
            }
        }
    }
    $current.ToString()
}
0
ответ дан marsze 28 February 2019 в 08:29
поделиться

Вот мой подход старой школы:

$line = ''
Get-Content C:\test.txt | 
    Select-String -Pattern 'Backup-ID: ' ,'Policy: ' ,'Primary Copy: ' ,'Expires:  ' ,'Copy Number: ' , 'Fragment Size ' ,'Expires: ' , 'MediaID:' |
        ForEach-Object {
            $aux = 

Вот мой подход старой школы:

[110]

Вывод :

D:\PShell\SO\54921319.ps1
hostname01,VM_weekly,23,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX122,3,6188832,1/5/2024 3:19:13 AM,XXX134
hostname02,VM_weekly2,24,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX244,3,6188832,1/5/2024 3:19:13 AM,XXX199,4,6188832,1/5/2024 3:19:13 AM,XXX177

Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .

$xArr = D:\PShell\SO\54921319.ps1
$xCsv = $xArr |  ConvertFrom-Csv -Header $(1..30|%{"a

Вот мой подход старой школы:

[110]

Вывод :

[111]
[112]

Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .

[113]

Конечно, вы можете вычислить

  • фактический верхний предел для -Header $(1..30|%{"a

    Вот мой подход старой школы:

    [110]

    Вывод :

    [111]
    [112]

    Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .

    [113]

    Конечно, вы можете вычислить

    • фактический верхний предел для [114] вместо оцененного 30, например. как ($xArr | % {

      Вот мой подход старой школы:

      [110]

      Вывод :

      [111]
      [112]

      Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .

      [113]

      Конечно, вы можете вычислить

      • фактический верхний предел для [114] вместо оцененного [115], например. как [116],
      • или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого Copy Number внутри данного Backup-ID)
      • [1120 ].Split(',').Count}|Measure-Object -Maximum).Maximum
        ,
      • или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого Copy Number внутри данного Backup-ID)
      • [1120 ]"})
        вместо оцененного 30, например. как ($xArr | % {

        Вот мой подход старой школы:

        [110]

        Вывод :

        [111]
        [112]

        Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .

        [113]

        Конечно, вы можете вычислить

        • фактический верхний предел для [114] вместо оцененного [115], например. как [116],
        • или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого Copy Number внутри данного Backup-ID)
        • [1120 ].Split(',').Count}|Measure-Object -Maximum).Maximum
          ,
        • или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого Copy Number внутри данного Backup-ID)
        • [1120 ]"}) $xcsv | Export-Csv -NoTypeInformation -Path c:\temp\result.csv

Конечно, вы можете вычислить

  • фактический верхний предел для -Header $(1..30|%{"a

    Вот мой подход старой школы:

    [110]

    Вывод :

    [111]
    [112]

    Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .

    [113]

    Конечно, вы можете вычислить

    • фактический верхний предел для [114] вместо оцененного 30, например. как ($xArr | % {

      Вот мой подход старой школы:

      [110]

      Вывод :

      [111]
      [112]

      Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .

      [113]

      Конечно, вы можете вычислить

      • фактический верхний предел для [114] вместо оцененного [115], например. как [116],
      • или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого Copy Number внутри данного Backup-ID)
      • [1120 ].Split(',').Count}|Measure-Object -Maximum).Maximum
        ,
      • или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого Copy Number внутри данного Backup-ID)
      • [1120 ]"})
        вместо оцененного 30, например. как ($xArr | % {

        Вот мой подход старой школы:

        [110]

        Вывод :

        [111]
        [112]

        Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .

        [113]

        Конечно, вы можете вычислить

        • фактический верхний предел для [114] вместо оцененного [115], например. как [116],
        • или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого Copy Number внутри данного Backup-ID)
        • [1120 ].Split(',').Count}|Measure-Object -Maximum).Maximum
          ,
        • или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого Copy Number внутри данного Backup-ID)
        • [1120 ] -split ':',2 # only 2 substrings if ($aux[0] -eq 'Backup-ID') { if ( $line -ne '' ) { $line } # Write-Output (current line) $line = $aux[1].Trim() } else { $line += ',' + $aux[1].Trim() } } $line # Write-Output (last line)

Вывод :

D:\PShell\SO\54921319.ps1
hostname01,VM_weekly,23,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX122,3,6188832,1/5/2024 3:19:13 AM,XXX134
hostname02,VM_weekly2,24,1/5/2024 3:19:13 AM,2,6188832,1/5/2024 3:19:13 AM,XXX244,3,6188832,1/5/2024 3:19:13 AM,XXX199,4,6188832,1/5/2024 3:19:13 AM,XXX177

Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .

$xArr = D:\PShell\SO\54921319.ps1
$xCsv = $xArr |  ConvertFrom-Csv -Header $(1..30|%{"a

Вот мой подход старой школы:

[110]

Вывод :

[111]
[112]

Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .

[113]

Конечно, вы можете вычислить

  • фактический верхний предел для -Header $(1..30|%{"a

    Вот мой подход старой школы:

    [110]

    Вывод :

    [111]
    [112]

    Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .

    [113]

    Конечно, вы можете вычислить

    • фактический верхний предел для [114] вместо оцененного 30, например. как ($xArr | % {

      Вот мой подход старой школы:

      [110]

      Вывод :

      [111]
      [112]

      Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .

      [113]

      Конечно, вы можете вычислить

      • фактический верхний предел для [114] вместо оцененного [115], например. как [116],
      • или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого Copy Number внутри данного Backup-ID)
      • [1120 ].Split(',').Count}|Measure-Object -Maximum).Maximum
        ,
      • или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого Copy Number внутри данного Backup-ID)
      • [1120 ]"})
        вместо оцененного 30, например. как ($xArr | % {

        Вот мой подход старой школы:

        [110]

        Вывод :

        [111]
        [112]

        Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .

        [113]

        Конечно, вы можете вычислить

        • фактический верхний предел для [114] вместо оцененного [115], например. как [116],
        • или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого Copy Number внутри данного Backup-ID)
        • [1120 ].Split(',').Count}|Measure-Object -Maximum).Maximum
          ,
        • или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого Copy Number внутри данного Backup-ID)
        • [1120 ]"}) $xcsv | Export-Csv -NoTypeInformation -Path c:\temp\result.csv

Конечно, вы можете вычислить

  • фактический верхний предел для -Header $(1..30|%{"a

    Вот мой подход старой школы:

    [110]

    Вывод :

    [111]
    [112]

    Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .

    [113]

    Конечно, вы можете вычислить

    • фактический верхний предел для [114] вместо оцененного 30, например. как ($xArr | % {

      Вот мой подход старой школы:

      [110]

      Вывод :

      [111]
      [112]

      Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .

      [113]

      Конечно, вы можете вычислить

      • фактический верхний предел для [114] вместо оцененного [115], например. как [116],
      • или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого Copy Number внутри данного Backup-ID)
      • [1120 ].Split(',').Count}|Measure-Object -Maximum).Maximum
        ,
      • или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого Copy Number внутри данного Backup-ID)
      • [1120 ]"})
        вместо оцененного 30, например. как ($xArr | % {

        Вот мой подход старой школы:

        [110]

        Вывод :

        [111]
        [112]

        Редактировать: [1119 ] … мне нужно экспортировать файл CSV… .

        [113]

        Конечно, вы можете вычислить

        • фактический верхний предел для [114] вместо оцененного [115], например. как [116],
        • или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого Copy Number внутри данного Backup-ID)
        • [1120 ].Split(',').Count}|Measure-Object -Maximum).Maximum
          ,
        • или даже вычислить несколько читаемых человеком заголовков (имея в виду повторяющиеся имена некоторых свойств для каждого Copy Number внутри данного Backup-ID)
        • [1120 ]
0
ответ дан JosefZ 28 February 2019 в 08:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: