使用regex-Python查找重复操作数

使用regex-Python查找重复操作数,python,regex,Python,Regex,我试图通过一个文件来查找表达式,例如a*B A和B可以是[A-Z][A-Z][0-9]中的任何东西,可以包括()等,但不包括逗号、分号、空格、换行符或任何其他算术运算符(++*)。这是8个分隔符。在A和*和B之间也可以有空格。此外,开放括号的数量需要与A和B中的封闭括号的数量相同 我尝试了类似的方法,但没有成功(不考虑A和B中的运算符): 示例1: (A1*B1.list(),C*D*E) 应给出3个匹配项: A1*B1.列表() C*D D*E 问题语句的扩展可以是,如果在backets中出现

我试图通过一个文件来查找表达式,例如a*B

A和B可以是
[A-Z]
[A-Z]
[0-9]
中的任何东西,可以包括
等,但不包括逗号、分号、空格、换行符或任何其他算术运算符
(++*)
。这是8个分隔符。在A和*和B之间也可以有空格。此外,开放括号的数量需要与A和B中的封闭括号的数量相同

我尝试了类似的方法,但没有成功(不考虑A和B中的运算符):

示例1:

(A1*B1.list(),C*D*E)
应给出3个匹配项:

  • A1*B1.列表()
  • C*D
  • D*E
  • 问题语句的扩展可以是,如果在backets中出现以下情况,则A和B中允许逗号、分号、空格、换行符或任何其他算术运算符(+-\*):

    示例2:

    (A*B.max(C*D,E))
    应给出2个匹配项:

  • A*B.max(C*D,E)
  • C*D

  • 我不熟悉正则表达式,很想找到一个解决方案。

    正则表达式有其局限性。正则表达式和文本解析之间的边界可能很紧。依我看,在您的情况下,使用解析器是一个更健壮的解决方案

    问题中的例子表明了递归模式。在这方面,解析器再次优于正则表达式风格


    看看这个建议的解决方案:。

    你能提供一些例子吗?使用
    搜索
    match
    尝试从头开始匹配。您可能希望搜索一个或多个非分隔符,后跟一个或多个分隔符,再后跟一些非分隔符。查看
    ^
    。正则表达式不是执行此特定任务的好工具。考虑创建一个简单的解析器太笨拙,但是为1嵌套级别工作。
    import re
    fp = open("test", "r")
    for line in fp:
        p = re.compile("( |,|;)(.*)[*](.*)( |,|;|\n)")
        m = p.match(line)
            if m:
                print 'Match found ',m.group()
            else:
                print 'No match'