Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 求解简单正则表达式_Python_Regex - Fatal编程技术网

Python 求解简单正则表达式

Python 求解简单正则表达式,python,regex,Python,Regex,我有一个文本文件,其中的行具有以下结构: class.method(params) 我想获取类、方法和参数。 请记住,有时没有参数,甚至可能没有括号 到目前为止,我已经 re.search(r'\w+', string) 但如果参数用引号括起来,它们就会被删除,我想保留它们 我怎样保存它们 示例: >>> process('class.method(params)') ('class','method','params') >>> process('cla

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

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','')
这个怎么样

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

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

您需要提供更多的输入和预期的输出,否则您最好使用
+
。是您试图解析的文件(注意这里的parse一词)实际上是一个语言源文件吗?@smerny我意识到我想要它们groups@HamZa我加了一些examples@JonClements这是我正在创建的自定义语法。OP没有提到想要组,问题似乎是
\w
与引号不匹配。此外,我会将参数/参数全部放在一个组中,因为例如,如果没有
应该没有
。类似于
(\([^)]*\)?
确切地说,如果参数用引号括起来,它就不起作用。@HamZa是的,这绝对是一个合理的批评。非常感谢。我同意我匆忙发布了一个答案——好吧,我们都在这里学习,我仍然需要学习更多,以更好地帮助人们。我只是选择了这种方式——试着分享我所知道的和能够解决的问题。非常感谢。嘿,我不觉得他们试图否认你的努力,他们非常尊重你。不包括最后一个教条式/苛刻的“你是10公里,你应该做X”或夸张的“100次编辑”。有了这个例外,我觉得他们很尊重我。