Выражение Powershell Regex для получения части строки - PullRequest
0 голосов
/ 21 июня 2020

Я хотел бы взять часть строки, чтобы использовать ее где-нибудь еще. Например, у меня есть следующие строки:

  • Project XYZ - это имя проекта - 20-12-11

Я хотел бы получить значение «XYZ - это название проекта "из строки. Слово «Проект» и символ «-» перед числом всегда будут.

Ответы [ 3 ]

6 голосов
/ 21 июня 2020

Думаю, здесь будет работать регулярное выражение , поскольку «Проект» и «-» присутствуют всегда:

(?<=Project ).+?(?= -)

Поиск может быть полезен для случаев, связанных с получением подстроки.

Объяснение:

  • (?<= = отрицательный просмотр назад
  • Project = начальная строка (включая пробел)
  • ) = закрытие отрицательного просмотра назад
  • .+? = соответствует чему-либо между
  • (?= = положительный просмотр вперед
  • - = конечная строка
  • ) = закрытие положительного просмотра вперед

Пример в PowerShell:

Function GetProjectName($InputString) {
    $regExResult = $InputString | Select-String -Pattern '(?<=Project ).+?(?= -)'
    $regExResult.Matches[0].Value
}

$projectName = GetProjectName -InputString "Project XYZ is the project name - 20-12-11"
Write-Host "Result = '$($projectName)'"
2 голосов
/ 21 июня 2020

вот еще одна версия регулярного выражения. [ ухмылка ] это может быть легче понять, так как он использует несколько базовых c шаблонов регулярных выражений.

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

  • определяет ввод строка
  • определяет префикс для соответствия на это сохранит только то, что идет после it.
  • определяет суффикс для соответствия эта часть сохранит только то, что было до .
  • запускает замену часть в () - это то, что будет помещено в 1-ю группу захвата.
  • показать, что было сохранено

код ...

$InString = 'Project XYZ is the project name - 20-12-11'
# "^" = start of string
$Prefix = '^project '
# ".+' = one or more of any character
# "$" = end of string
$Suffix = ' - .+$'

# "$1" holds the content of the 1st [and only] capture group
$OutString = $InString -replace "$Prefix(.+)$Suffix", '$1'

$OutString
0 голосов
/ 21 июня 2020
# define the input string
$str = 'Project XYZ is the project name - 20-12-11'

# use regex (-match) including the .*? regex pattern 
# this patterns means (.)any char, (*) any times, (?) maximum greed
# to capture (into brackets) the desired pattern substring
$str -match "(Project.*?is the project name)"

# show result (the first capturing group)
$matches[1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...