Python正则表达式使用
Python正则表达式使用
参考资料:
Python正则表达式详解 - 我当道士那儿些年 - 博客园
前言
由于遇到一个提取字符串某个子串的问题,刚开始使用了暴力方法求解,后面在舍友大佬帮助下,使用了正则表达式来提取,质量明显高了一档。详细的方法,以及详细的参数教程里都已叙述的非常详尽,这里主要介绍一下遇到问题以及解决问题的方案。
问题描述
'''Obtaining JSON from switch...
Done
Control utility for runtime P4 table manipulation
RuntimeCmd: dmac [implementation=None, mk=ethernet.dstAddr(exact, 48)]
mcast_src_pruning [implementation=None, mk=standard_metadata.instance_type(exact, 32)]
smac [implementation=None, mk=ethernet.srcAddr(exact, 48)]
sad [implementation=None, mk=ethernet.srcAddr(exact, 48)]
RuntimeCmd: '''
从上述字符串中提取出,dmac、mcast_src_pruning、smac、sad
问题解决
可以观察到需提取的字符串都有一个特点,都是介于RuntimeCmd,且后面都有跟着一个[xxx],所以我们也从这里入手。
下面给出具体代码以及具体的正则解释
import re
str = '''Obtaining JSON from switch...
Done
Control utility for runtime P4 table manipulation
RuntimeCmd: dmac [implementation=None, mk=ethernet.dstAddr(exact, 48)]
mcast_src_pruning [implementation=None, mk=standard_metadata.instance_type(exact, 32)]
smac [implementation=None, mk=ethernet.srcAddr(exact, 48)]
sad [implementation=None, mk=ethernet.srcAddr(exact, 48)]
RuntimeCmd: '''
# flag = 0
# table_name = []
# name = ''
# for i in str:
# if i == 'R':
# flag = 1
# print flag
# elif i == ' ' and flag == 1:
# flag = 2
# print flag
# elif flag == 2 and i != ' ':
# name = name + i
# print flag
# elif flag == 2 and i == ' ':
# table_name.append(name)
# name = ''
# flag = 3
# print flag
# elif flag == 3 and i == '\n':
# flag = 2
# print i
# print table_name
matchObj = re.findall('(\S+)(?=[\s]*\[.*\])', str, re.M | re.I)
print matchObj
上面注释掉的代码为暴力解法,下列则为正则表达式求解,具体函数功能可查找参考文献,这里介绍正则表达式,即(\S+)(?=[\s]*\[.*\])这个串。
第一个()内部的数据则是所需提取的数据,\S表示非空字符,+表示非空字符至少出现一次,(?=)表示前向肯定界定符,表示之后所连着的语句是什么,\s表示空字符,[\s]*表示非空字符出现大于等于0次,由于[是特殊字符,所以需要加\进行转义,.表示任意字符,.+则表示任意语句,\]则与前面的[一样,需要进行转义。通过此正则表达式,则可成功提取出我们所需的数据。
['dmac','mcast_src_pruning','smac','sad']
为一个list对象,成功提取。
Python正则表达式使用的更多相关文章
- Python 正则表达式入门(中级篇)
Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...
- Python正则表达式中的re.S
title: Python正则表达式中的re.S date: 2014-12-21 09:55:54 categories: [Python] tags: [正则表达式,python] --- 在Py ...
- Python 正则表达式入门(初级篇)
Python 正则表达式入门(初级篇) 本文主要为没有使用正则表达式经验的新手入门所写. 转载请写明出处 引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达 ...
- python正则表达式re
Python正则表达式: re 正则表达式的元字符有. ^ $ * ? { [ ] | ( ).表示任意字符[]用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字符集,对于字符集中的字符可 ...
- Python正则表达式详解
我用双手成就你的梦想 python正则表达式 ^ 匹配开始 $ 匹配行尾 . 匹配出换行符以外的任何单个字符,使用-m选项允许其匹配换行符也是如此 [...] 匹配括号内任何当个字符(也有或的意思) ...
- 比较详细Python正则表达式操作指南(re使用)
比较详细Python正则表达式操作指南(re使用) Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式.Python 1.5之前版本则是通过 regex 模块提供 E ...
- Python正则表达式学习摘要及资料
摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2 ...
- python正则表达式 小例几则
会用到的语法 正则字符 释义 举例 + 前面元素至少出现一次 ab+:ab.abbbb 等 * 前面元素出现0次或多次 ab*:a.ab.abb 等 ? 匹配前面的一次或0次 Ab?: A.Ab 等 ...
- Python 正则表达式-OK
Python正则表达式入门 一. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分. 正则表达式是用于处理字符串的强大工具, 拥有自己独特的语法以及一个独立的处理引擎, 效率上 ...
- Python天天美味(15) - Python正则表达式操作指南(re使用)(转)
http://www.cnblogs.com/coderzh/archive/2008/05/06/1185755.html 简介 Python 自1.5版本起增加了re 模块,它提供 Perl 风格 ...
随机推荐
- python第三十九课——面向对象(二)之初始化属性
设计Car类,初始化属性speed,提供一个run函数 import time class Car: def __init__(self,speed): self.speed=speed #将Road ...
- easyui combobox 带 checkbox 亲自验证
$('#cc').combobox({ url:'combobox_data1.json', method:'get', ...
- [CQOI2009]叶子的染色
传送门:https://www.luogu.org/problemnew/show/P3155 一道挺水的树形dp题,然后我因为一个挺智障的问题debug了一晚上…… 嗯……首先想,如果一个点的颜色和 ...
- 抽象类、final关键字、多态
1.1 抽象类 1.1.1 抽象类概念 C extends B,B extends A,在继承过程中,形成一个继承金字塔,位于金字塔底部的类越来越具体(强大),位于塔顶的越来越抽象(简单). 例如:人 ...
- 随手练——DFS小练
1. 单词接龙 https://www.luogu.org/problemnew/show/P1019 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头 ...
- windows 下配置 Nginx 常见问题
因为最近的项目需要用到负载均衡,不用考虑,当然用大名鼎鼎的Nginx啦.至于Nginx的介绍,这里就不多说了,直接进入主题如何在Windows下配置. 我的系统是win7旗舰版的,到官网下载最新版本 ...
- SpringMVC原理&MVC设计思想
什么是MVC? MVC是一种架构模式 --- 程序分层,分工合作,既相互独立,又协同工作 MVC是一种思考方式 --- 需要将什么信息展示给用户? 如何布局? 调用哪些业务逻辑? MVC流程图如下图所 ...
- maven使用及创建项目
一:简单介绍 他是一个帮我们管理jar,并帮助我们处理jar包依赖. 他是一个我们编译.测试.运行.打包的一键构建. 我们在使用后面的命令的同时,前面的过程也自动执行. 二.仓库的分类: 分本地仓库. ...
- day36
今日内容 1.GIL解释器锁 2.GIL解释器锁与自定义锁 3.死锁现象与递归锁 4.信息量 5.Event 6.线程queue 1.GIL解释器锁 from multiprocessing impo ...
- struts2_E_commerce_maven
这是作业的第二题:使用struts实现电子商务网站,这是基于之前的代码的,所以,主要就是修改成为struts的mvc模式. 1.开始,先把以前做的一个maven项目修改成为另一个项目(简称重命名) 重 ...