Como usar regex para recuar código no bloco de notas ++

por exemplo, eu tenho o seguinte código

Module MPI
    Use MPI
    !
! MPI info
    If (true) Then
        Print *, ''
! empty line 1
! empty line 2
    End If
    Integer ithread, nthread, ierr
End Module MPI

As linhas começam com! assine as linhas de comentário no fortran.Quero que essas linhas de comentário tenham o mesmo recuo que o recuo da linha anterior.

Ou seja, eu quero esse formato

Module MPI
    Use MPI
    !
    ! MPI info
    If (true) Then
        Print *, ''
        ! empty line 1
        ! empty line 2
    End If
    Integer ithread, nthread, ierr
End Module MPI

Eu quero fazer isso no bloco de notas ++ usando regex. Mas se houver uma escolha melhor, sinta-se à vontade para responder.

Aqui está o que eu tentei: substituir^(\s*)(.*?\r\n)\s*\! ComoAs linhas começam com2$1!. No entanto, produz

Module MPI
    Use MPI
    !
! MPI info
    If (true) Then
        Print *, ''
        ! empty line 1
! empty line 2
    End If
    Integer ithread, nthread, ierr
End Module MPI

Ainda há duas linhas incorretas. Parece que, embora o padrão^(\s*)(.*?\r\n)\s*\! corresponde a esta linha, no entanto, apenas a ignora, pois o mecanismo de expressão regular já corresponde às linhas anteriores.

Minha pergunta é como resolver esse problema de travessão com regex?

questionAnswers(2)

yourAnswerToTheQuestion