当前位置: 代码迷 >> VB Dotnet >> 比较难的正则表达式
  详细解决方案

比较难的正则表达式

热度:165   发布时间:2016-04-25 02:20:04.0
求一个比较难的正则表达式
1、问题:对类似如下的表达式
sin(4+5*cos(3*6+pow(3,tan(x+5))))+5*cos(x),-4/sin(3*6+pow(pow(sin(3+6),2),x/5+tan(x)))+9*5,4+5*x*sin(x)
2、我需要匹配出
sin(4+5*cos(3*6+pow(3,tan(x+5))))+5*cos(x)
-4/sin(3*6+pow(pow(sin(3+6),2),x/5+tan(x)))+9*5
4+5*x*sin(x)

3、即上面三个字符串是用逗号分隔,但是上面每个字符串本身可能含有逗号,而要求分隔的标准是如果这个逗号是函数本身拥有的,如Pow(x,y)这个逗号就不需要分隔,如果不是就分隔。或者理解为,将指定字符串分隔成标准的表达式字符串,例如
sin(4+5*cos(3*6+pow(3,tan(x+5))))+5*cos(x)
这是一个完整的表达式,而如果添加了逗号后,这个就不是完整的表达式了,这时就需要分隔出来

4、这个可能得使用平衡组,但自己尝试了很多还是写不出来,如果您会,希望能指点一二!

------解决方案--------------------
需要空格或者其他运算符在a-z那组里自己加
"(^
------解决方案--------------------
(?<=,))([a-zA-Z0-9,+\-*/]
------解决方案--------------------
(?<open>\()
------解决方案--------------------
(?<close-open>\)))+?(?(open)(?!))((?=,)
------解决方案--------------------
$)"