取得Python代码段的正则表达式?

FireHell 2010-03-08 03:15:53
如:
def aa(i):
print i
a=[1,2,3]
b=2
c=3

能识别出起始位def aa(i):
和结束位" a=[1,2,3]"?
...全文
100 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
FireHell 2010-03-15
  • 打赏
  • 举报
回复
准备用AST做了
FireHell 2010-03-09
  • 打赏
  • 举报
回复
十分感谢各位兄弟!
我在做一个Python代码编辑器,项目中要用的,所以想要方便点找出代码。
angel_su 2010-03-09
  • 打赏
  • 举报
回复
像有些开头""" ( [{ 未完成,写到下行就是自由格式,不好用正则,用字符处理也很麻烦,可以试试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
notax 2010-03-08
  • 打赏
  • 举报
回复
我觉得应该用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用法
thy38 2010-03-08
  • 打赏
  • 举报
回复
像Python对语法这么要求严格的我觉得就不要用正则了,效率不高。直接用判断就可以了,我写了个识别顶级函数的,抛砖引玉:
s = r'''
def aa(i):
print i
a=[1,2,3]
b=2
c=3
def 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)

37,721

社区成员

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

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