Simple REGEX - Como obter todas as linhas que começam com “|” - [Pipeline] até a linha acima que termina com [Pipeline]

1

Explicação

Com a ajuda do REGEX, estou tentando converter o banco de dados de sinônimos italiano para o seguinte formato:

synonym1|synonym2|synonym3
anothersynonym1|anothersynonym2
...........
......

Neste momento, eu tenho um banco de dados de sinônimos não convertidos neste formato:

a|       - word
|per     -it's synonym
|verso   -another synonym of the word "a" in the second row
abate|    - second word
|priore|superiore
abbacchiare|
|avvilire|deprimere
abbacchiarsi|
|abbattersi|abbiosciarsi|accasciarsi

Esclarecimento: Eu gostaria de usar expressões regulares para coincidir com todas as linhas que começam com "|" (pipeline) e mova-os para a linha acima para mesclar com a palavra correspondente com linhas terminando com (Pipeline) e também movendo-se em linhas começando com "|" (segunda - terceira - quarta linhas de sinônimos que podem ser mescladas, obviamente quando mescladas linhas com "terminando e começando" Pipelines um dos (Pipelines) deve ser removido para obter o formato desejado:

Exemplo do banco de dados convertido do banco de dados não convertido acima

a|per|verso
abate|priore|superiore
abbachiare|avvilire|deprimere
abbachiarsi|abbattersi|abbiosciarsi|accasciarsi

Alguém pode me ajudar a encontrar a EXPRESSÃO REGULAR exata usando a função FIND e REPLACE com qualquer editor de texto?

    
por Daniel Foltynek 19.10.2011 / 10:08

2 respostas

0

Se você estiver usando o Windows, poderá usar o modo de pesquisa estendida do Notepad ++ para fazer isso em duas etapas:

1: Substitua |\r\n| por | - encontrará todos os primeiros sinônimos

a|per|versoabate|priore|superioreabbacchiare|avvilire|deprimereabbacchiarsi|abbattersi|abbiosciarsi|accasciarsi

2:Substitua\r\n|por|-Issolocalizarátodosossinônimossubsequentes

a|per|verso
abate|priore|superiore
abbacchiare|avvilire|deprimere
abbacchiarsi|abbattersi|abbiosciarsi|accasciarsi
    
por 19.10.2011 / 14:18
0
perl -ne 'chomp; print /^(.*)\|\s*$/?"\n$1":$_' filename

a|per|verso
abate|priore|superiore
abbacchiare|avvilire|deprimere
abbacchiarsi|abbattersi|abbiosciarsi|accasciarsi

Ou, se você for muito exigente com as linhas iniciais e finais:

perl -ne 'chomp; print /^(.*)\|\s*$/?$.==1?$1:"\n$1":$_;END{print"\n"}' filename
a|per|verso
abate|priore|superiore
abbacchiare|avvilire|deprimere
abbacchiarsi|abbattersi|abbiosciarsi|accasciarsi
    
por 19.10.2011 / 12:00

Tags