在 Notepad++ 中查找和替换:如何插入具有相同缩进量的上述行?

在 Notepad++ 中查找和替换:如何插入具有相同缩进量的上述行?

我需要在包含许多函数定义的大量 Python 文件中替换所有出现的

def some_func(foo, bar):

@jit(parallel=True)
def some_func(foo, bar):

任何缩进级别def some_func(foo, bar)有。

例子:我想更换

def some_func_1(foo, bar):

    def some_func_2(foo, bar):

        def some_func_3(foo, bar):

def some_func_4(foo, bar):

@jit(parallel=True)
def some_func_1(foo, bar):

    @jit(parallel=True)
    def some_func_2(foo, bar):

        @jit(parallel=True)
        def some_func_3(foo, bar):

@jit(parallel=True)
def some_func_4(foo, bar):

动机:我想“强力加速/并行化” FDTD 模拟包,而不必通过使用numba自动并行化@jit

附言:对于这种幼稚的滥用方法的任何评论/批评@jit也都是受欢迎的(例如,如果这根本不起作用)!

答案1

更好的解决方案可能是使用jit_模块自动执行所有函数

答案2

这适用于任何类型的空格(空格或制表符)以及任何类型的换行符\n, \r\n, \r


  • Ctrl+H
  • 找什么:^(\h*)(?=def\b.*(\R))
  • 用。。。来代替:$1@jit\(parallel=True\)$2$1
  • 打钩 相符
  • 打钩 环绕
  • 选择 正则表达式
  • 取消勾选 . matches newline
  • Replace all

解释:

^           # beginning of line
    (           # group 1
        \h*         # 0 or more horizontal spaces
    )           # end group
    (?=         # positive lookahead, make sure we have after:
        def\b       # literally "def" and a word boundary, in order to not match "default"
        .*          # 0 or more any character but newline
        (\R)        # group 2, any kind of linebreak
    )           # end lookahead

替代品:

$1                      # content of group 1, the spaces to insert
@jit\(parallel=True\)   # literally
$2                      # content of group 2, the linebreak used in the file
$1                      # content of group 1, the spaces to insert

截图(之前):

在此处输入图片描述

截图(之后):

在此处输入图片描述

答案3

您可以使用正则表达式捕获组来做到这一点,然后在替换中的两行上重复使用第一个组(缩进)。

搜索(使用正则表达式):

(^.*)(def .*\([^\(]+\))

并将其替换为:

\1@jit\(parallel=True\)\r\n\1\2

参见实际操作: 在此处输入图片描述

答案4

在 Notepad++ 中,搜索(^.*)(def )(末尾有空格) 并替换为 即可\1@jit\(parallel=True\)\r\n\1\2。末尾的空格很重要,否则诸如 之类的字符串default也会被替换。

相关内容