1

У меня возникают проблемы с получением строки для возврата с использованием replace(), где мне нужно получить числовые цифры, но только из цифр, которые последовательно расположены в 8-символьной группе.

Некоторые из этих строк будут иметь другие числа внутри них, но эти числа никогда не будут в коллекции из 8 групп, поэтому я хотел бы пропустить их и возвращать только те цифры, которые находятся в группе из 8 цифр.

осветление

Эти строки на самом деле являются именами файлов, но если мне удастся получить помощь в этом простом примере для получения ожидаемого результата, я легко смогу включить их в другую логику PowerShell скриптового процесса.

  • Я предпочитаю не использовать YYYY текущего года, $YYYY = (get-date).year или что-либо подобное, а затем искать другие цифры, чтобы само имя файла определяло действие, а не год независимо от того,

  • Я пробовал различные методы и даже получил некоторые, чтобы вернуть TRUE используя IN think "[^0-9]{8}.*$ Или что-то в этом роде, но ничего такого, что само по себе не могло бы вернуть реальные 8 цифр.


Пример строки данных

error_PP3_XXX_PSI_20180109PM.err
error_PP3_XXX_PSI_20180110AM.err
error_PP3_XXX_PSI_20180111PM.err
error_PP3_XXX_PSI_20180115PM.err
error_PP3_XXX_Temp_20180110AM.err
error_YYY_20180109AM.err
error_YYY_20180109PM.err

PowerShell

  • Правильный результат

    Это рабочий пример, где в строке только 8 последовательных цифр

    "error_YYY_20180109PM.err" -replace "[^0-9]" , ""
    

    Результат

    20180109
    
  • Неверный результат

    Это нерабочий пример, где в строке есть дополнительные числовые символы, а не только 8 последовательных цифр

    "error_PP3_XXX_PSI_20180115PM.err" -replace "[^0-9]" , ""
    

    Результат

    320180115
    

1 ответ1

2

Это должно работать
if ("error_PP3_XXX_PSI_20180109PM.err" -match "([0-9]{8})"){$matches[1]} else {""}

Предполагается, что у вас не более одной группы из 8 цифр. Также обратите внимание, что $ match остается установленным, даже если следующая команда не совпадает. Поэтому вы можете захотеть очистить его вручную, используя совпадения с clear-variable matches (или используя более короткие совпадения псевдонимов clv matches)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .