3

我有一个文本文件,其中包含具有以下结构的行:

class.method(params)

我想获取类、方法和参数。请记住,有时没有参数,甚至可以没有括号。

到目前为止我有

re.search(r'\w+', string)

但是如果参数用引号引起来,它们会被删除,我想保留它们。

我该如何保留它们?

例子:

>>> process('class.method(params)')
('class','method','params')
>>> process('class.method("params")')
('class','method','"params"')
>>> process('class.method('params')')
('class','method',''params'')
>>> process('class.method()')
('class','method','')
>>> process('class.method')
('class','method','')
4

1 回答 1

4

这个怎么样?

>>> import re
>>> reg_exp = '(\w+)\.(\w+)\(?([^)]*)\)?'
>>> re.match(reg_exp, 'class.method("params")').groups()
('class', 'method', '"params"')
>>> re.match(reg_exp, "class.method('params')").groups()
('class', 'method', "'params'")
>>> re.match(reg_exp, "class.method()").groups()
('class', 'method', '')
>>> re.match(reg_exp, 'class.method(params)').groups()
('class', 'method', 'params')
>>> re.match(reg_exp, 'class.method').groups()
('class', 'method', '')
  • (\w+)是匹配 1 个或多个字母数字字符的捕获组
  • ([^)]*)是一个匹配任何字符的捕获组,除了)
  • \(?匹配(或没有
  • \)?匹配)或没有

\(?([^)]*)\)?有助于处理没有提供参数和括号的情况。

于 2013-08-20T18:25:24.410 回答