0

特定の関数のパラメーターを収集する python スクリプトを作成しようとしています。パラメータは、次のように複数行で指定できます。

str = "getParameters(['ABCD_1','ABCD_2',\
                       'ABCD_3','ABCD_4'])\

これはすでに機能しています: (' と ' の間のすべての単語をキャッチできます):

parameters = re.findall(r'\'[\w-]+\'', str)
for parameter in parameters:
   print parameter

しかし、 getParameters 関数の場合にのみパラメータを収集したいのですが、これは機能しません:

getparameters = re.findall(r'getParameters\(\[[\w-]+', str, re.X|re.DOTALL)
for line in getparameters:
    print line

提案してください!

4

2 に答える 2

2

これは ast を使った例です。

import ast

module = ast.parse(
    """getParameters(['ABCD_1','ABCD_2',
                      'ABCD_3','ABCD_4'])""")

for item in module.body:
    if isinstance(item.value, ast.Call) and item.value.func.id == 'getParameters':
        parameters = [each.s for each in item.value.args[0].elts]

print parameters
于 2013-01-15T10:41:43.577 に答える
0

RegEx の使用に固定されていて、関数が 1 回だけ発生する場合は、次を試すことができます。

re.findall('\'(\w+)\',?', re.search('(getParameters\(.+?\))', x, re.X|re.S).group(1), re.X|re.S)

理想的ではありませんが、機能します。これを行うためのより良い方法があると確信しています。

于 2013-01-15T14:59:27.050 に答える