Как извлечь очень специфическую строку из значения в Powershell? - PullRequest
1 голос
/ 26 октября 2019

Как можно написать один размер, подходящий для всех сценариев PowerShell, которые могут извлекать конкретные числа из строки? Допустим, у меня есть 3 компьютера, и их имена GT0104MTR, GT0040MTR и GT0444MTR. Числа 104, 40 и 444 - это символы, которые я хочу извлечь ..

Как бы я проигнорировал любые начальные нули и получил бы от того, где число начинается и заканчивается, даже если число заканчивается на ноль?

Надеюсь, это имеет смысл, и спасибо за все, что указывает мне правильное направление!

Ответы [ 3 ]

0 голосов
/ 26 октября 2019

это немного другой метод, который использует -replace, чтобы избавиться от нецифровых чисел и затем избавиться от лидирующих нулей. [ ухмылка ]

$InStuff = @'
GT0104MTR
GT0040MTR
GT0444MTR
GT0555MTR
GT0666MTR
GT1001MTR
'@ -split [System.Environment]::NewLine

$InStuff -replace '[^0-9]' -replace '^0{1,}'

вывод ...

104
40
444
555
666
1001
0 голосов
/ 26 октября 2019

Чтобы предложить краткую альтернативу с оператором -replace :

PS> 'GT0104MTR', 'GT0040MTR', 'GT0444MTR' -replace '.*\D0*(\d+).*', '$1'
104
40
444

Примечание:

  • Если есть идентификаторы со всемиНулевые числа (например, GT0000MTR), 0 извлекается из них.

  • Это отличается от решения boxdog , которое игнорирует таких идентификаторов.

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

0 голосов
/ 26 октября 2019

Для строк, которые вы даете, это должно работать:

$strings = "GT0104MTR","GT0040MTR","GT0444MTR"

$strings | ForEach-Object {
    if($_ -match '0*(?<Number>([1-9][0-9]*))') {
        $matches.Number
    }
}

Что дает этот вывод:

104
40
444

Примечание:

  • Идентификаторы со всеми-нулевые числа на входе (например, GT0000MTR), если таковые имеются, будут игнорироваться.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...