2

この形式のメソッドシグネチャを解析しようとしています。

'function_name(foo=<str>, bar=<array>)'

このことから、メソッドの名前、各引数、およびその型が必要です。<もちろん、文字などは必要ありません>。パラメータの数は可変です。

私の質問は、この正規表現を使用するときにすべてのパラメーターを取得するにはどうすればよいですか?私はPythonを使用していますが、一般的なアイデアを探しています。名前付きグループが必要ですか?必要な場合、それらを使用して、それぞれがタイプを持つ複数のパラメーターをすべて1つの正規表現でキャプチャするにはどうすればよいですか?

4

1 に答える 1

2

可変数のグループを Python の正規表現と照合することはできません (これを参照してください)。代わりに、正規表現とsplit().

>>> name, args = re.match(r'(\w+)\((.*)\)', 'function_name(foo=<str>, bar=<array>, baz=<int>)').groups()
>>> args = [re.match(r'(\w+)=<(\w+)>', arg).groups() for arg in args.split(', ')]
>>> name, args
('function_name', [('foo', 'str'), ('bar', 'array'), ('baz', 'int')])

これは、可変数 (0 を含む) の引数に一致します。追加の空白を許可しないことを選択しましたが\s+、形式があまり厳密でない場合は、識別子の間に追加して許可する必要があります。

于 2010-12-20T21:04:26.173 に答える