解决简单的正则表达式

时间:2013-08-20 18:23:04

标签: python regex

我的文本文件包含以下结构的行:

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','')

1 个答案:

答案 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个或多个字母数字字符的捕获组
  • ([^)]*)是一个匹配除)
  • 之外的任何字符的捕获组
  • \(?匹配(或无匹配
  • \)?匹配)或无匹配

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