我的文本文件包含以下结构的行:
class.method(params)
我想获得课程,方法和参数。 请记住,有时候没有参数,甚至没有括号。
到目前为止我已经
了re.search(r'\w+', string)
但如果params用引号括起来,它们就会被删除,我想保留它们。
如何保留它们?
示例:
>>> 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','')
答案 0 :(得分: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个或多个字母数字字符的捕获组([^)]*)
是一个匹配除)
\(?
匹配(
或无匹配\)?
匹配)
或无匹配 \(?([^)]*)\)?
有助于处理没有提供参数和括号的情况。