我希望找到python函数的方法名称。我只想查找方法名称,如果它们不在"def "
之后。 E.g:
"def method_name(a, b):" # (should not match)
"y = method_name(1,2)" # (should find `method_name`)
我目前的正则表达式为/\W(.*?)\(/
。
答案 0 :(得分:2)
str = "def no_match(a, b):\ny = match(1,2)"
str.scan(/(?<!def)\s+\w+(?=\()/).map(&:strip)
#⇒ ["match"]
正则表达式评论:
def
的负面反馈,\w
,Sidenote :永远不要使用regexp来解析任何用途的长字符串。
答案 1 :(得分:0)
我假设不包含“def”的行的形式为“[something] = [零或多个空格] [方法名称]”。
R1 = /
\bdef\b # match 'def' surrounded by word breaks
/x # free-spacing regex definition mode
R2 = /
[^=]+ # match any characters other than '='
= # match '='
\s* # match >= 0 whitespace chars
\K # forget everything matched so far
[a-z_] # match a lowercase letter or underscore
[a-z0-9_]* # match >= 0 lowercase letters, digits or underscores
[!?]? # possibly match '!' or '?'
/x
def match?(str)
(str !~ R1) && str[R2]
end
match?("def method_name1(a, b):") #=> false
match?("y = method_name2(1,2)") #=> "method_name2"
match?("y = method_name") #=> "method_name"
match?("y = method_name?") #=> "method_name?"
match?("y = def method_name") #=> false
match?("y << method_name") #=> nil
我选择使用两个正则表达式来处理我的第一个和倒数第二个例子。请注意,该方法返回方法名称或伪造值,但后者可能是false
或nil
。