Regex do PowerShell retorna 8 dígitos consecutivos somente da string

1

Estou tendo problemas para obter uma string para retornar usando replace () onde preciso obter os dígitos numéricos, mas somente a partir dos dígitos que estão em um grupo lado a lado de 8 caracteres consecutivamente.

Algumas dessas strings terão outros números dentro delas, mas esses números nunca estarão em uma coleção de 8 grupos, então eu gostaria de omiti-los e retornar apenas os dígitos que estão no grupo de 8 dígitos.

Esclarecimento

Essascadeiassãorealmentenomesdearquivos,masseeupuderobteralgumaajudacomesseexemplosimplesparaoresultadoesperado,possoincorporarfacilmenteàoutralógicadoPowerShelldoprocessocomscript.

  • EuprefironãousaroYYYYdoanoatual,$YYYY=(get-date).yearouqualquercoisaassimeentãoprocuraroutrosdígitosparaqueopróprionomedoarquivoditeaaçãoenãooanoindependentemente

  • EutenteiváriosmétodoseatéconseguialgunspararetornarTRUEusandoINpensar"[^0-9]{8}.*$ ou algo assim, mas nada para retornar facilmente os 8 dígitos propriamente ditos.

Sequências de dados de exemplo

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

  • Resultado correto

    Este é um exemplo de trabalho em que apenas os 8 dígitos consecutivos estão na string

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

    Result

    20180109
    
  • Resultado incorreto

    Este é um exemplo que não funciona onde há caracteres numéricos adicionais na string, além dos 8 dígitos consecutivos

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

    Result

    320180115
    
por Pimp Juice IT 16.01.2018 / 00:10

1 resposta

2

Isso deve funcionar em if ("error_PP3_XXX_PSI_20180109PM.err" -match "([0-9]{8})"){$matches[1]} else {""}

Assume que você não possui mais de um grupo de 8 dígitos. Por favor, note também que $ matches permanece definido mesmo se o comando seguinte não corresponder. Então você pode querer limpá-lo manualmente usando clear-variable matches (ou usando alias mais curtos clv matches )

    
por 16.01.2018 / 01:26