所有參數假設我有一個字符串,如下列:正則表達式匹配函數名和Python中
"func(arg1, arg2, arg3, arg4, ..., argn)"
編輯:此功能無法在一些特定的語言。它只是有這種格式。如果它更容易,不要認爲它是一個函數調用,只是一個字符串。
我想寫一個正則表達式來匹配函數和每個的參數。我正在用Python寫這個。這樣做的期望輸出是:
{"function" : "func", "arg" : ["arg1", "arg2", ... , "argn"]}
編輯:儘管爭論可能是函數調用,我可以很容易地遞歸地嘗試用相同的正則表達式匹配他們一次我創建一個工程。通過這個我的意思是我可以在每個參數上對函數進行遞歸。但這不是真的有關。我是而不是試圖創建一個解釋器,只是用來識別參數。
這是我在這樣的嘗試:
import re
s = "func(arg1, arg2, arg3, arg4, argn)"
m = re.match(r"(?P<function>\w+)\s?\((?P<args>(?P<arg>\w+(,\s?)?)+)\)", s)
print m.groupdict()
這裏是輸出:
{'function': 'func', 'args': 'arg1, arg2, arg3, arg4, argn', 'arg': 'argn'}
匹配功能就好了,所以做的參數設置。但是,我似乎無法匹配個別論點。這是我的正則表達式的問題,還是Python正則表達式匹配的限制?
EDIT2:我知道,我現在就可以使用下面的代碼分裂的論點:
d["arg"] = d["args"].split(", ")
但我在想,如果我可以用正則表達式完成整個工作。特別是,我想知道爲什麼「arg」僅與最後一個參數相匹配。 (1)希望弄清楚爲什麼Python每次只匹配最後一個參數,(2)我是否可以在Python中進行Scheme風格的模式匹配。或者,如果在Python中有與Scheme-style模式匹配一樣直觀的東西。我查看了ast模塊,其語法非常複雜。
這個函數調用某種特定的語言嗎?你不應該使用正則表達式來解析已經存在正確/完整解析器的語言...... – Borealid 2012-04-15 17:04:49
你不能用正則表達式來做到這一點(假設你想匹配單個參數,它們本身可能是函數調用)。你需要一個實際的解析器。如果你堅持寫你自己的,然後閱讀:http://effbot.org/zone/simple-iterator-parser.htm – Wes 2012-04-15 17:12:13
你可能想簽出[pyparsing](http://pyparsing.wikispaces.com/ )如果你打算做更復雜的事情。 – 2012-04-15 17:20:27