博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python正则表达式使用
阅读量:5174 次
发布时间:2019-06-13

本文共 2148 字,大约阅读时间需要 7 分钟。

Python正则表达式使用

参考资料:

前言

由于遇到一个提取字符串某个子串的问题,刚开始使用了暴力方法求解,后面在舍友大佬帮助下,使用了正则表达式来提取,质量明显高了一档。详细的方法,以及详细的参数教程里都已叙述的非常详尽,这里主要介绍一下遇到问题以及解决问题的方案。

问题描述

'''Obtaining JSON from switch...DoneControl utility for runtime P4 table manipulationRuntimeCmd: 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 restr = '''Obtaining JSON from switch...DoneControl utility for runtime P4 table manipulationRuntimeCmd: 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_namematchObj = re.findall('(\S+)(?=[\s]*\[.*\])', str, re.M | re.I)print matchObj

上面注释掉的代码为暴力解法,下列则为正则表达式求解,具体函数功能可查找参考文献,这里介绍正则表达式,即(\S+)(?=[\s]*\[.*\])这个串。

第一个()内部的数据则是所需提取的数据,\S表示非空字符,+表示非空字符至少出现一次,(?=)表示前向肯定界定符,表示之后所连着的语句是什么,\s表示空字符,[\s]*表示非空字符出现大于等于0次,由于[是特殊字符,所以需要加\进行转义,.表示任意字符,.+则表示任意语句,\]则与前面的[一样,需要进行转义。通过此正则表达式,则可成功提取出我们所需的数据。

['dmac', ''] ['dmac','mcast_src_pruning','smac','sad']

为一个list对象,成功提取。

转载于:https://www.cnblogs.com/wpqwpq/p/6854487.html

你可能感兴趣的文章
redis持久化和分布式实现
查看>>
递归和冒泡算法
查看>>
Error Message
查看>>
给 3Com 3C940 Gigabit LOM 安装Windows Server 2008 驱动
查看>>
[ 论文阅读 ] [ 2018 KDD ] [ 42 ] Deep Interest Network for Click-Through Rate Prediction
查看>>
即日开始在博客园上整理一下RecruitWorkflow项目的的开发经验。
查看>>
1016. 部分A+B
查看>>
iOS开发之oc(八)--知识补充:id类型和init方法补充
查看>>
nginx负载均衡
查看>>
弹出遮罩层后禁止滚动效果
查看>>
DOCTYPE声明对JS获取窗口宽度和高度的影响【转】
查看>>
使用表达式避免拼接SQL语句
查看>>
Leetcode152. Maximum Product Subarray乘积的最大子序列
查看>>
Leetcode598.Range Addition II范围求和2
查看>>
Leetcode617.Merge Two Binary Trees合并二叉树
查看>>
jquery选择div下的ul下的li下的a
查看>>
lock的两种方式
查看>>
YCSB-mapkeeper
查看>>
Python 经典正则表达式语法实例
查看>>
oracle函数 MAX([distinct|all]x)
查看>>