Cómo usar regex para sangrar código en notepad ++

por ejemplo tengo el siguiente 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

Las líneas comienzan con! firmar que es líneas de comentarios en fortran.Quiero que esas líneas de comentarios tengan la misma sangría que su sangría de línea anterior.

Es que quiero este 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

Quiero hacer esto en notepad ++ usando regex. Pero si hay una mejor opción, no dude en responder.

Esto es lo que he intentado: reemplazar^(\s*)(.*?\r\n)\s*\! comoLas líneas comienzan con2$1!. Sin embargo, produce

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

Todavía hay dos líneas no correctas. Parece que aunque el patrón^(\s*)(.*?\r\n)\s*\! coincide con esta línea, sin embargo, solo se omite para el motor regex que ya coincide con las líneas anteriores.

Mi pregunta es cómo resolver este problema de sangría con regex.

Respuestas a la pregunta(2)

Su respuesta a la pregunta