我安装了一个将字母按字母顺序排列的插件。我只需要一种选择python文件中所有def的方法。到目前为止,我已经有了这个正则表达式。
由于没有任何换行符,因此不会选择最后一行。我可以在最后输入换行符,但我想避免这种情况。实际上,理想情况下,我希望避免使用上面的所有换行符。
但是我担心如果我不抓住换行符,那么它将不会匹配中间带有空行的函数。
如果有比我正在尝试的方法更好的方法-通过选择块并使用按字母顺序排列的插件-那么请提出建议。否则,是否可以通过某种方式使正则表达式与defs相匹配?
答案 0 :(得分:0)
def.+(\n?\n.+)+
将完成您想要的。 (崇高似乎遵循通常的“点不是换行符”约定)
分解表达式的组成部分:
def.+
-匹配def行,直到换行符
\n?\n.+
-匹配换行符,后面跟一些字符,还可以选择另选一个换行符(该前缀用于处理def中间的空行)
(...)+
-启动一个捕获组,并匹配其模式一次或多次
(\n?\n.+)+
-结合前两部分,因此我们将任意非空行序列与任意两个非空行之间的最多一个空行进行匹配(可取的是,任意非空行和空行然后非空行的块)
如果允许与“空”定义相匹配,则最后一个+
可以是*
def empty():
答案 1 :(得分:0)
尝试一下
^(\s*)(def.*(?:\n\1\s+.*|\n\s*)+$)