使用regex-Python查找重复操作数
我试图通过一个文件来查找表达式,例如a*B A和B可以是使用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-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'