Como posso substituir um curinga em uma pesquisa regex?

4

Estou tentando comentar todas as declarações de tipos de variáveis em um script que possuo, mas me deparei com esse problema algumas outras vezes. Eu gostaria de combinar uma string, seguida por um nome de variável, seguido por uma string e substituir o texto exato, mas com uma aspa simples na frente da segunda string.

Por exemplo:

Dim variableName As Boolean
Dim variableName2 As String

deve se tornar:

Dim variableName 'As Boolean
Dim variableName2 'As String

Agora, um problema é que eu também tenho strings "As" em outro lugar no código que não devem ser substituídas, então um simples find / replace não funciona.

Estou usando o NotePad ++ e tenho a seguinte expressão regular que corresponde às minhas declarações corretamente:

Dim.*As

Mas não consigo descobrir o que colocar no lugar do .* no campo de substituição. Dim.*'As obviamente substitui a string curinga pelo literal .* , o que não é bom.

Alguma idéia?

    
por DACrosby 01.10.2014 / 23:10

2 respostas

7

Você pode usar "grupos de captura" RegEx para especificar as seções que deseja capturar e manter e substituir o restante.

No Notepad ++, os grupos de captura são representados por colchetes ( ( e ) ), e você pode colocar o conteúdo deles no "Substituir" usando notações como , , etc. para cada captura grupo que você adicionou (em ordem de aparição).

Portanto, altere sua pesquisa RegEx para (Dim.*)(As) , que irá encontrar as coisas como fez originalmente para você, mas faz dois grupos de captura. Um antes de onde você deseja inserir o ' e um depois.

Para isso, encontrará Dim variableName As Boolean como antes e os dois grupos de captura conterão Dim variableName e As Boolean .

Para o campo Substituir no Notepad ++, use ' ; isso substituirá o texto correspondente pelo primeiro grupo de captura, depois o ' , seguido pelo segundo grupo de captura.

Execute sua substituição e Dim variableName As Boolean se torna Dim variableName 'As Boolean (etc).

    
por 01.10.2014 / 23:23
1

Isso pode ser feito com um lookbehind e lookahead. Por exemplo: Localizar:

(?<=Dim)(.*?)(?=As)

Substituir por:

'

Isso deve fazer o que você está tentando fazer. O '\ 1' na substituição corresponde ao texto entre 'Dim' e 'As', permitindo que você adicione um comentário.

Editar

Como uma nota secundária depois que eu testei, isso só funciona com Replace All

    
por 01.10.2014 / 23:15