PowerShell Извлечение текста из строки - PullRequest
0 голосов
/ 28 мая 2020

Я действительно ужасен, когда дело доходит до Regex, и на некоторое время застрял. Как я могу получить Person A из следующей строки?

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum<br>
Affected: Lorem<br>
Duty Officer: Person A<br>
Affected: Ipsum

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 28 мая 2020

Вы можете использовать следующее регулярное выражение для достижения своих результатов:

^Duty Officer: ([\w ]+)$

Объяснение вышеуказанного регулярного выражения:

^ - представляет начало данной тестовой строки.

([\w ]+) - представляет захват. Соответствие любого символа слова ([0-9A-Za-z_]) вместе с пробелом (поскольку имена могут содержать пробелы) один или несколько раз.

$ - обозначает конец данной тестовой строки.

Вы можете здесь можно найти демонстрацию приведенного выше регулярного выражения .

КОМАНДЫ POWERSHELL: (Вы можете изменить команды в соответствии с вашими потребностями)

PS C:\Path\To\MyDesktop> $input_path='C:\Path\To\MyDesktop\test.txt'
PS C:\Path\To\MyDesktop> $output_path='C:\Path\To\MyDesktop\testResult.txt'
PS C:\Path\To\MyDesktop> $regex='^Duty Officer: ([\w ]+)$'
PS C:\Path\To\MyDesktop> select-string -Path $input_path -Pattern $regex -AllMatches | % { $_.Matches.groups[1] } | % { $_.Value } > $output_file

Приведенный выше результат принимает ввод, который вы предоставили через файл test.txt , и печатает желаемый результат в файле testResult.txt . Обратите внимание на команду select-string для захвата только группы 1. Я использовал $_.Matches.groups[1].

Для лучшего понимания команд, использованных выше; см. здесь.

0 голосов
/ 28 мая 2020

вот еще один метод. он предполагает, что данные представляют собой ОДНУ многострочную строку и что в этой строке задействован только один блок целевого текста.

что он делает ...

  • строит многострочную строку для работы
  • устанавливает префикс для разделения на
  • устанавливает суффикс split on
  • разбивается по префиксу
  • захватывает последний элемент в результирующем массиве
  • разбивается на суффикс
  • захватывает 1-й элемент в этом массиве
  • удаляет любые начальные или конечные пробелы
  • присваивает значение переменной $ Var
  • отображает это значение

код ...

# this presumes the data is ONE multiline string
#     and that there are no other blocks of data in the string
$InStuff = @'
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum<br>
Affected: Lorem<br>
Duty Officer: Person A<br>
Affected: Ipsum
'@

$Prefix = 'Duty Officer:'
$Suffix = '<br>'

$DutyOfficer = (($InStuff -split $Prefix)[-1] -split $Suffix)[0].Trim()

$DutyOfficer

вывод = Person A

0 голосов
/ 28 мая 2020

Вы можете получить определенную часть текста с помощью индексации. Это более широко известно как функция substring в PowerShell. Вы также можете использовать функцию split , если хотите указать символ для разделения текста.

Пример 1

$string_to_convert = "Duty Officer: Person A"
$string_to_convert.Substring(14,22)
>>> "Person A"

Пример 2

$string_to_convert = "Duty Officer: Person A"
$string_to_convert.Split(" ")[2]
>>> "Person A"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...