关于正则表达式匹配函数参数的问题

全部点亮 2009-12-19 09:32:07
高手:

我想写一个正则表达式 从类似:IF(AW70=1,IF(AC73)HTDPSCOM.FuncSet.OE_Round(AW72*AH69,0.1)),HTDPSCOM.FuncSet.OE_Round(AH69*AVERAGE(AC69:AG72),0.1))) 这样的字符串中,
取出 函数OE_Round(AH69*AVERAGE(AC69:AG72),0.1))的参数:0.1 。

我写了一个正则表达式:OE_Round\(((?>[^()]+)|(?R))*\) 可是不对。
希望能得到你的帮助。
...全文
403 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
angel_su 2009-12-21
  • 打赏
  • 举报
回复
不一定非要完全依赖正则,按()闭合情况另外分析处理一下,这样可能容易点。
import re

text = \
"""
OE_Round(AW72*AH69,0.1)
OE_Round(AH69*AVERAGE(AC69:AG72),0.1)
OE_Round(AH69*AVERAGE(AC69:AG72),AVERAGE(AC69:AG72))
OE_Round(f(x,y,z(a,b)*c), 0.1)
OE_Round (f(x,y)+f1(a,b,c), f2(AW72*AH69,0.1) )
OE_Round ((f(x)+5)*f1(x,y), 1+*f2(0.1*f3(x*5+1)))
"""

robj = re.compile("OE_Round *?\(")
pos = 0
args = []
mobj = robj.search(text, pos)
while mobj:
open = beg = 1
pos = mobj.end()
while open:
if text[pos] == ')':
open -= 1
elif text[pos] == '(':
open += 1
elif text[pos] == ',' and open == 1:
beg = pos+1
pos += 1
args.append(text[beg:pos-1].strip())
mobj = robj.search(text, pos)

for i in args:
print i

结果:
0.1
0.1
AVERAGE(AC69:AG72)
0.1
f2(AW72*AH69,0.1)
1+*f2(0.1*f3(x*5+1))
thy38 2009-12-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 angel_su 的回复:]
不一定非要完全依赖正则,按()闭合情况另外分析处理一下,这样可能容易点。
[/Quote]同意这个观点,正则不是万金油,有些地方它是不适用的。用栈处理更好些。我只是顺着LZ的意思用正则写了。
thy38 2009-12-20
  • 打赏
  • 举报
回复
先写了个第二参数为小数的,OE_Round中只有一个‘,’的最简单的情况。如果LZ的情况比这个复杂请跟帖。
import re
s=('''IF(AW70=1,IF(AC73)HTDPSCOM.FuncSet.OE_Round(AW72*AH69,0.1)),'''
'''HTDPSCOM.FuncSet.OE_Round(AH69*AVERAGE(AC69:AG72),0.2)))''')

print s
reg = re.compile(r'OE_Round\([^,]+,([0-9]\.[0-9]+)\)+')
result = reg.findall(s)
print result

输出:
['0.1', '0.2']
thy38 2009-12-20
  • 打赏
  • 举报
回复
用正则处理数据必须要理解数据,LZ的第二参数有什么规则没?
thy38 2009-12-20
  • 打赏
  • 举报
回复
LZ的第二参数可能是嵌套吗?也就是说会出现这种情况吗:
OE_Round(AH69*AVERAGE(AC69:AG72),AVERAGE(AC69:AG72)))

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧