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: '''

从上述字符串中提取出,dmacmcast_src_pruningsmacsad

问题解决

可以观察到需提取的字符串都有一个特点,都是介于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正则表达式使用的更多相关文章

  1. Python 正则表达式入门(中级篇)

    Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...

  2. Python正则表达式中的re.S

    title: Python正则表达式中的re.S date: 2014-12-21 09:55:54 categories: [Python] tags: [正则表达式,python] --- 在Py ...

  3. Python 正则表达式入门(初级篇)

    Python 正则表达式入门(初级篇) 本文主要为没有使用正则表达式经验的新手入门所写. 转载请写明出处 引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达 ...

  4. python正则表达式re

    Python正则表达式: re 正则表达式的元字符有. ^ $ * ? { [ ] | ( ).表示任意字符[]用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字符集,对于字符集中的字符可 ...

  5. Python正则表达式详解

    我用双手成就你的梦想 python正则表达式 ^ 匹配开始 $ 匹配行尾 . 匹配出换行符以外的任何单个字符,使用-m选项允许其匹配换行符也是如此 [...] 匹配括号内任何当个字符(也有或的意思) ...

  6. 比较详细Python正则表达式操作指南(re使用)

    比较详细Python正则表达式操作指南(re使用) Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式.Python 1.5之前版本则是通过 regex 模块提供 E ...

  7. Python正则表达式学习摘要及资料

    摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2 ...

  8. python正则表达式 小例几则

    会用到的语法 正则字符 释义 举例 + 前面元素至少出现一次 ab+:ab.abbbb 等 * 前面元素出现0次或多次 ab*:a.ab.abb 等 ? 匹配前面的一次或0次 Ab?: A.Ab 等 ...

  9. Python 正则表达式-OK

    Python正则表达式入门 一. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分. 正则表达式是用于处理字符串的强大工具, 拥有自己独特的语法以及一个独立的处理引擎, 效率上 ...

  10. Python天天美味(15) - Python正则表达式操作指南(re使用)(转)

    http://www.cnblogs.com/coderzh/archive/2008/05/06/1185755.html 简介 Python 自1.5版本起增加了re 模块,它提供 Perl 风格 ...

随机推荐

  1. [C++] set与multiset的常用函数

    参考资料:[C++ STL]Set和Multiset set 与 multiset set不允许重复 multiset允许重复 例: set : 1 2 3 4 5 6 multiset : 1 2 ...

  2. PHP(Mysql/Redis)消息队列的介绍及应用场景案例--转载

    郑重提示:本博客转载自好友博客,个人觉得写的很牛逼所以未经同意强行转载,原博客连接 http://www.cnblogs.com/wt645631686/p/8243438.html 欢迎访问 在进行 ...

  3. JAVA框架 json数据交互

    一.导入依赖: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId& ...

  4. VBA删除 语法

    Option Explicit '清空数据  Private Sub CommandButton1_Click() Dim qknum As Integer  '选择是或者否 来确认删除数据 '中对话 ...

  5. Hadoop集群nodes unhealthy解决方法

    在搭建好Hadoop集群之后,所有服务均可正常启动,但是在运行MapReduce程序的时候,发现任务卡在7/09/07 22:28:14 INFO mapreduce.Job: Running job ...

  6. TensorFlow(1):使用Docker镜像搭建TensorFlow环境

    1,关于TensorFlow TensorFlow 随着AlphaGo的胜利也火了起来. google又一次成为大家膜拜的大神了.google大神在引导这机器学习的方向. 同时docker 也是一个非 ...

  7. [Lydsy1805月赛]对称数 BZOJ5361

    分析: 这个题,还是蛮有趣的.考虑,如果l,r区间内的所有数出现奇数次,那么[l-1,r]的抑或和等于所得抑或和. 之后怎么维护呢,主席树维护区间抑或和,记得将每个点附上一个ull级别的随机数,之后抑 ...

  8. 20155304《网络对抗》MSF基础应用

    20155304<网络对抗>MSF基础应用 实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.1一个主动攻击实践,如ms08_ ...

  9. 20155334 网络对抗PC平台逆向破解(二)

    注入Shellcode并运行攻击 shellcode就是一段机器指令(code) 通常这段机器指令的目的是为获取一个交互式的shell(像linux的shell或类似windows下的cmd.exe) ...

  10. Aspose.Cells.dll的用法

    public void OutExcel() { #region WorkbookDesigner designer = new WorkbookDesigner(); Worksheet sheet ...