Formatação de string RegEx no Notepad++

Formatação de string RegEx no Notepad++

Sou muito bom em RegEx, mas há uma coisa que não consigo entender como funciona.

Como alguém pesquisaria/substituiria no NotePad++ e garantiria que a saída tivesse um comprimento fixo, enquanto a entrada pudesse ser flexível?

Por exemplo, fazendo um regex sobre isso: 23-6-2016para se tornar: 23-06-2016(0 extra para 06, mas não se for 12, por exemplo)

Outra opção é criar isto:

TestStringe Testse tornaria
TestString______________________(espaços extras.)
Test____________________________(espaços extras.)

Claro, a ideia aqui é fazer uma pesquisa/substituição em massa onde todas as saídas tenham o mesmo comprimento.

Por favor, explique o pensamento por trás disso.

EDIT: para dar uma ideia dos dados com os quais estou trabalhando, aqui está um exemplo de linha que preciso processar:

12345678    TXT 19700101    0   100 20160624    100 Comment text
12345678    TXT 19700101    100 100,25  20160624    0,25    Comment text
12345678    TXT 19700101    100,25  100,5   20160624    0,25    Comment text

Observe que eles estão separados por guias. O primeiro 0 da primeira linha deve ser formatado como 0,00, o 100 como 100,00, mas o 12345678 e as datas não devem ser formatadas com ,00 Os últimos 100,5 devem ser formatados como 100,50

Eu resolvi o assunto do encontro, então isso é menos importante agora.

Responder1

Em resposta a:

12345678 TXT 19700101 0 100 20160624 100 Texto do comentário
12345678 TXT 19700101 100 100,25 20160624 0,25 Texto do comentário
12345678 TXT 19700101 100,25 100,5 20160624 0,25 Texto do comentário

Para a 4ª coluna:
^((?:\S+\s+){3}\d+)(\s)para \1,0\2
^((?:\S+\s+){3}\d+,\d)(\s)para\10\2

Para 5ª/7ª coluna:
semelhante ao acima, basta substituir {3}por {4}/ {6}na regra respectivamente

Explicação
1ª regra

O1ª regraanexa ,0a números sem ,. Agora todos os números devem ter ,\d.

2ª regra

O2ª regraanexa um 0àqueles com um único dígito após a vírgula.

Quanto a(?:):grupo sem captura, as colunas anteriores já foram capturadas, \1portanto a captura adicional é desnecessária.

Isso apenas preenche o número com 2 casas decimais. Para preencher uma quantidade arbitrária, use a pad excessively, then trimabordagem.

Palavra final?
Na minha opinião, regex simples como no notepad++ é inadequado para esta tarefa. Alguns scripts básicos como bash ou perl teriam lidado com isso com uma legibilidade muito maior.

Responder2

Seção A: Almofada com comprimento específico

Para preencher à direita linhas com N caracteres usando expressões regulares, adicione N espaços ao final da linha e agrupe os primeiros N caracteres substituindo o restante.

Passo 1: Adicionar caracteres de preenchimento

Localizar: $Substituir:______________________________

No final da linha adicione 30 espaços. (Usei sublinhados porque os espaços não seriam formatados na postagem).

Passo 2: Cortar 30 caracteres à esquerda

Para preencher uma data delimitada por traços no início de uma linha, combine cada seção de acordo.

Localizar: ^([[:print:]]{0,30}).*$ Substitua por\1

No início da linha, substitua um grupo de até trinta caracteres imprimíveis seguido por quaisquer caracteres restantes pelo grupo.

Para escolher um comprimento de linha diferente, use n-espaços na Passagem 1 e substitua 30 pelo comprimento na Passagem 2.

Seção B: Linha começando com data

Passe 1 (dia do mês):

Descubra o que: ^([0-9])- Substitua por:0\1-

Substitua o padrão (linha começando com um único dígito seguido por um travessão) pelo zero preenchido, o dígito e o travessão.

Passe 2 (mês):

Descubra o que: -([0-9])- Substitua por:-0\1-

Substitua o padrão (um único dígito entre dois travessões) por um travessão, o zero preenchido, o dígito e o travessão.

informação relacionada