Como extrair partes específicas de um grande lote de strings?

3

Por exemplo.

64d134a354eb2bf43626a73091514a2d:QMP0R\khOiPmkW1>bP,_-NTY4%-!P#:a123456
7d057d46b88f2cf4845dec57be4f3158:iR+LE[SQ\R~~o*+CCNL?i)mC>$G:U#:123321
6e0c116855a273f0c8c41dec1d21c160:s'?:fL2/mVj{&['Onkyqf"y~47^YU#:abc123

Todas as strings seguem um padrão de três partes. As duas primeiras partes, cada uma separada por dois pontos, e o elemento obrigatório após o segundo cólon.

Exceção: na parte dois da string, também existem os dois pontos ocasionais. (veja a terceira linha terminando em "abc123")

Minha proposta seria reverter todas as strings e, uma vez feito, eliminar todos os caracteres após e incluindo os primeiros dois pontos. Quando concluído, inverta o texto novamente para terminar com os elementos necessários, que devem ser:

a123456
123321
abc123

Nota: isso deve ser aplicado a um grande lote de tais cadeias!

    
por george 12.04.2014 / 08:03

4 respostas

3

No Notepad ++, você pode usar o seu Find & Substituir recurso para remover tudo antes do terceiro segmento.

Basta usar essa localização, com o botão de opção Expressões regulares em:

^.*:(?!.*:)

E substitua por nada e, em seguida, pressione Substituir tudo.

Oqueaexpressãosignificaé:

^Ensurematchbeginsatthestartoftheline.*Matchanynumberofcharacters:Untilitmatchesacolon(:)(?!Andensurethatafterthecolon,thereareno....*:Colonafteranynumberofcharactersonthesameline)

Resultado:

Se a terceira parte também puder conter dois pontos, mas sempre começará com #: quando comparada com as outras partes, então você pode usar uma expressão ligeiramente diferente para o find:

^.*#:

E substitua por nada.

    
por 12.04.2014 / 10:29
1

Existem algumas maneiras de fazer isso.

A maneira mais fácil é provavelmente apenas carregar o arquivo no editor de texto Sublime, e ctrl + clique no meio no início do primeiro bit de texto que você deseja manter (a123456) e arrastar o botão do meio para baixo no canto inferior direito do documento. Você deve ter todo o seu texto desejado em destaque. Então ctrl + c, ctrl + v em um novo arquivo. Isso pressupõe que todas as linhas tenham o texto desejado começando no mesmo local, que se parece com a coluna 67 do seu exemplo.

Se não, carregue o arquivo sublimamente, pressione ctrl + f e clique no botão .* na barra de ferramentas de busca na parte inferior. Pesquisar por

#:(.*)

Clique em localizar todos à direita, copie e cole-o em um novo documento. Ctrl + f para encontrar novamente, pesquise

^..

encontre tudo novamente e exclua. Isso deixa você com nada além de suas cordas no final (a123456, 123321, abc123)

Como isso funciona? O botão .* procura Expressões Regulares ou Regex. Regex define regras pelas quais você combina padrões de texto. Suas regras são bem simples aqui: encontre o texto começando com #: e pegue tudo depois dele. Você provavelmente poderia ter feito isso em um passo, mas ainda não sou o melhor com o Regex. então o que fazemos é procurar por #: , seguido por qualquer número ( * ) de qualquer caractere ( . ). Nós então copiamos isso para um novo arquivo.

Em seguida, combinamos o início ( ^ ) de dois caracteres ( .. ) e simplesmente os excluímos para que ficássemos com o texto desejado.

Eu recomendo que você use o editor de texto Sublime para isso, pois é gratuito, rápido e seu recurso de pesquisa permite que você selecione com muita facilidade grupos desconectados de texto e copie + cole em outro lugar. O Notepad ++ também pode fazê-lo, mas seu recurso regex adiciona um monte de texto de lixo indicando onde ele encontrou as correspondências, o que obviamente você não deseja.

    
por 12.04.2014 / 09:57
0

O que eu faço é pegar todas as strings e importá-las para o excel ou algum outro programa de planilha. use o Colon como o separador de coluna e você deve ter todos os elementos na terceira coluna da tabela.

A maioria dos dados estaria na terceira coluna e alguns na quarta, e presumivelmente poderia haver instâncias de muitos dois pontos nos dados, então eu inseriria uma coluna no começo, que olha através da linha e acha a última célula com dados e coloca isso na primeira coluna.

Algo como esta fórmula que testei no Excel 2010:

= SE (ISBLANK (D1), C1, IF (ISBLANK (E1), D1, IF (ISBLANK (F1), E1, F1)))

procurará pelas linhas C, D e E e colocará o valor da última coluna na célula com a equação.

Esta fórmula só olha para 3 colunas, pode ser modificada infinitamente

Se você usar o preenchimento para preencher a coluna, você deve obter as respostas que você está procurando na coluna A

.     
por 12.04.2014 / 08:23
0

Você é um editor de texto com recursos de pesquisa e substituição regex. Seu termo de pesquisa deve ser:

.*:(.*)

A substituição deve ser:


Eu usei o Sublime Text, mas o notepad2 / Notepad ++ funcionará.

Explicação de regex:

.* - Matches any number of characters
:  - Match a colon
(.*) - Match any number of character as a subgroup

Em seguida, o substitui toda a linha correspondente pelo conteúdo do subgrupo (o texto que você deseja). O Regex é ganancioso por padrão (na maioria das implementações) e corresponderá às strings mais longas possíveis. Isso significa que este regex corresponderá tantos caracteres quanto possível antes da segunda parte do regex (dois pontos seguidos por qualquer número de caracteres).

    
por 14.04.2014 / 02:05

Tags