Operações aritméticas em regex

3

Estou usando o plugin regex do gedit (estilo regex do Python). Eu gostaria de fazer alguma operação aritmética em uma referência anterior a um grupo.

Por exemplo:

PART 1 DATA MODELS Chapter  
2 Entity-Relationship Model 27

Eu gostaria de mudá-lo para ser

PART 1 DATA MODELS Chapter  25
2 Entity-Relationship Model 27

Meu regex é ^(PART.*)\n(.*\s(\d+))\n e gostaria de substituí-lo por -2\n\n . Mas o regex substituto não está certo.

    
por Tim 20.07.2011 / 04:30

2 respostas

2

Eu não sei agora sobre o gedit, mas em vim Operações aritméticas no regex são fáceis. por exemplo:

:%s/\d\+/\=submatch(0)+25/g

encontra cada número inteiro e adiciona 25 a ele.

Além disso, consulte aqui uma solução Perl para um problema semelhante.

    
por 20.07.2011 / 10:49
2

Meu entendimento é que você deseja adicionar no final de cada linha começando por 'PART' o último número da próxima linha menos 2. Se sim, isso pode ser feito com 'awk' :

awk '!/^PART/{print}/^PART/{
getline next_line;
match(next_line, "[^ ]*$");
print $0 " " substr(next_line, RSTART) - 2;
print next_line}' <your file>

Este script é executado sob a suposição de que a última linha do arquivo de entrada não será iniciada por 'PART' e que a linha após uma linha iniciada por 'PART' conterá um espaço e um número em seu final. Se necessário, a verificação de erros pode ser adicionada.

    
por 20.07.2011 / 13:52