2013-01-15 32 views
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 

請建議!

+0

要完全清楚:這是用Python使用Python編寫的代碼的函數參數嗎? – Richard

+2

解析python中的python代碼檢查出[ast模塊](http://docs.python.org/library/ast.html#module-ast) – georg

+0

是的,實際上我想用python regexp處理python代碼。 – Balee13

回答

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 
+0

嗨,謝謝我想嘗試,但:NameError:名稱'ast'沒有定義 – Balee13

+0

嗨,你能幫我使用這個AST? – Balee13

+0

@ Balee13:你忘了第一行。 –

0

如果你固定在使用正則表達式,如果只出現一次的功能,你可以嘗試:

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

它的效果並不理想,但它的作品。我相信有更好的方法來做到這一點。

相關問題