2016-08-03 3 views
1

Учитывая строку, какPowershell регулярного выражения, чтобы удалить все, кроме ключа

«Отпечаток является: ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678910111»

Как удалить весь текст, который не 40 символов строки, состоящая из A-Z 0-9?

В настоящее время я ищу строку «Отпечаток пальца:» и удаляю его, но я чувствую, что было бы безопаснее искать буквенно-цифровую цифру в 40 символов.

$foo = $foo -replace 'The fingerprint is: ','' 

Я ожидаю, что это сработает, но не повезло.

$foo = $foo -creplace '^[A-Z0-9]{40}','' 

Я также пытался просто ищу герой, которые соответствуют

$foo = $foo -match '[A-Z0-9]{40}' 

ответ

3

Зависит немного, но если это 40 смежное, и это единственная строка 40 символов можно использовать заменить:

"The fingerprint is: ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678910111" -replace '.*([A-Z0-9]{40}).*', '$1' 

Примечание: замена, $ 1, является ссылкой на группу соответствия. Это не переменная PowerShell и намеренно записывается в одинарные кавычки, поэтому она не будет расширяться.

+0

Если это * только * 40 строку символов, пропустить регулярные выражения и '«Отпечаток является: ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678910111».split() |? Длина -eq 40' – TessellatingHeckler

2

Чтобы соответствовать алфавитно-цифровым символам 40 символов, без замены, этого

$foo = 'The fingerprint is: ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678910111'; 
$foo -Match '[A-Z0-9]{40}' | Out-Null; 
Write-Output $matches[0]; 

печатает

ABCDEFGHIJKLMNOPQRSTUVWXYZ12345678910111 
  • [A-Z0-9] является выражение кронштейна соответствия какого-либо из содержащихся символов (- обозначает диапазон значений)
  • {40} соответствует предыдущему элементу 40 раз
  • Out-Null подавляет логическое значение, возвращаемое -match оператора
+0

Прекрасный краткий пример, но помните, что \ w также соответствует подчеркиванию (_). –

+0

@ChrisDent Полезно знать о [\ w] (https://msdn.microsoft.com/en-us/library/20bw873z (v = vs.110) .aspx), спасибо! – Bryan

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