首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

取得Python代码段的正则表达式?解决办法

2012-02-09 
取得Python代码段的正则表达式?如:def aa(i):print ia[1,2,3]b2c3能识别出起始位def aa(i):和结束位a

取得Python代码段的正则表达式?
如:
def aa(i):
  print i
  a=[1,2,3]
b=2
c=3

能识别出起始位def aa(i):
和结束位" a=[1,2,3]"?

[解决办法]
像Python对语法这么要求严格的我觉得就不要用正则了,效率不高。直接用判断就可以了,我写了个识别顶级函数的,抛砖引玉:

Python code
s = r'''def aa(i):    print i    a=[1,2,3]b=2c=3def a():    print\  'w''''def findFunc(s):    result = []    begin = False    def show(x): print '\n***Function***:\n', '\n'.join(x)    ss = s.split('\n')    for i,row in enumerate(ss):        if len(row)==0: continue        if begin:            if row.startswith('    '):                result.append(row)            elif ss[i-1].endswith('\\'):                result.append(row)            else:                show(result)                begin = False                result = []        if row.startswith('def '):            begin = True            result.append(row)    show(result)findFunc(s)
[解决办法]
我觉得应该用ast 才能把他正确解释出来

e.g.,

import ast

class V(ast.NodeVisitor):
def visit_FunctionDef(self, node):
print 'def %s' % (node.name)

s='''
def aa(i):
print i
a = [ 1, 2, 3]

b = 2
c = 3
'''

t = ast.parse(s) 
V().visit(t)


"""gives
def aa
"""

其馀的LZ再看看 ast用法

[解决办法]
像有些开头""" ( [{ 未完成,写到下行就是自由格式,不好用正则,用字符处理也很麻烦,可以试试tokenzie模块,会变成下面的东西,然后先搜连续出现的def aa后开始计算配对的indent和dedent,按lz的例子就单纯一组,行2缩进一次到了行5抵消,应该就是函数尾了...

1,0-1,3:NAME'def'
1,4-1,6:NAME'aa'
1,6-1,7:OP'('
1,7-1,8:NAME'i'
1,8-1,9:OP')'
1,9-1,10:OP':'
1,10-1,11:NEWLINE'\n'
2,0-2,4:INDENT' '
2,4-2,9:NAME'print'
2,10-2,11:NAME'i'
2,11-2,12:NEWLINE'\n'
3,4-3,5:NAME'a'
3,6-3,7:OP'='
3,8-3,9:OP'['
3,10-3,11:NUMBER'1'
3,11-3,12:OP','
3,13-3,14:NUMBER'2'
3,14-3,15:OP','
3,16-3,17:NUMBER'3'
3,17-3,18:OP']'
3,18-3,19:NEWLINE'\n'
4,0-4,1:NL'\n'
5,0-5,0:DEDENT''
5,0-5,1:NAME'b'
5,2-5,3:OP'='
5,4-5,5:NUMBER'2'
5,8-5,9:NEWLINE'\n'
6,0-6,1:NAME'c'
6,2-6,3:OP'='
6,4-6,5:NUMBER'3'
6,5-6,6:NEWLINE'\n'
7,0-7,0:ENDMARKER''
>Exit code: 0

热点排行