python正则表达式如何对括号进行成对匹配?
时间:2011-07-21
来源:互联网
QUOTE:
有时我们需要匹配像( 100 * ( 50 + 15 ) )这样的可嵌套的层次性结构,这时简单地使用\(.+\)则只会匹配到最左边的左括号和最右边的右括号之间的内容(这里我们讨论的是贪婪模式,懒惰模式也有下面的问题)。假如原来的字符串里的左括号和右括号出现的次数不相等,比如( 5 / ( 3 + 2 ) ) ),那我们的匹配结果里两者的个数也不会相等。有没有办法在这样的字符串里匹配到最长的,配对的括号之间的内容呢?
在.Net Framework的正则表达式中,提供了”平衡组/递归匹配“的处理方法(见《正则表达式30分钟入门教程》)。
在python中,又有什么方法较好的实现这种匹配呢?
作者: y_square 发布时间: 2011-07-21
python 暂不支持动态正则表达式,所以要实现嵌套结构匹配只能自己来实现了。
复制代码
表达式未进行任何优化,需要的话自己来搞吧~
- import re
- pattern_0 = r'\([^()]*\)' #depth 0 pattern
- pat_left = r'\((?:[^()]|'
- pat_right = r')*\)'
- def pattern_generate(pattern, depth=0):
- while(depth):
- pattern = pat_left + pattern + pat_right
- depth -= 1
- return pattern
-
- def main():
- data = r'test(1+2*(2-1)-3*(5+2)+10+(()))'
- pat = pattern_generate(pattern_0, 2)
- print('Pattern:', pat)
- prog = re.compile(pat)
- result = prog.search(data)
- if result:
- print('Find: {}'.format(result.group(0)))
- else:
- print('Can\'t match')
-
- if __name__ == '__main__':
- main()
作者: ccporxy 发布时间: 2011-07-22
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28