我有一个Python模块,我想捕获它的所有公共方法,例如,没有私有或子方法
def Func1(c, v1=None, v2=None, v3=None):
def childFunc(c): # I don't want to catch this
这是我的正则表达式:
/def ([a-zA-Z]\w+\([\w, =]+\)):/
但是,这也匹配了子方法,并且它不适用于跨多行的定义:
def Func2(c, v1=None, v2=None, v3=None, \
v4=None, v5=None):
Tags:
使用
见proof
在使用大括号和大括号的任何其他语言中,试图将子函数拒之门外很快就会成为使用正则表达式的噩梦。但在Python中,它实际上似乎是可行的。试试这个:
^(?:\t| {4})def ([a-zA-Z]\w*\([^:]*\)):
4
表示一条缩进行使用了多少空格,因此根据需要进行更改Demo
这不仅包括函数定义(与其他答案一样),还包括整个函数。
解释
^def
匹配一行的开头,后跟一个“def”和一个空格“”\w+
与函数名匹配\([^\f\v\r\n]*?\)\:
匹配一个括号,其中包含任何不是新行开头的内容(lazy),后跟“:”[\s\S]+?
完全匹配任何内容(懒惰)^
匹配行的开头(?![ \t#])
要求下一步不是空格、制表符或注释的开头相关问题 更多 >
编程相关推荐