玩弄 python 正则表达式
这里记录一个我常用的模型,每次久了不使用正则就会忘记。
记得最好玩的一句关于正则表达式的话就是 当你想到一件事情可以用正则表达式解决的时候 现在你就面临了两个问题了。
python里面使用了re模块对正则表达式进行了集成。
下面来匹配这样一段话作为例子
"JD请求异常返回: 商品列表中含有不能购买的商品[1322410]" 注意这个括号里面的数字是随机的
匹配方法1.
使用re.match方法这个方法如果匹配成功将返回一个匹配成功的对象可以使用对象的相关方法提取内容,如果没有匹配到将会返回None.
如我使用下面代码:
import re
haha = re.match("JD请求异常返回: 商品列表中含有不能购买的商品\[(\d+)\]", "JD请求异常返回: 商品列表中含有不能购买的商品[1322410]", )
print haha.group(0) 打印:
JD请求异常返回: 商品列表中含有不能购买的商品[1322410]
匹配方法2.
使用re.compile先创建一个partten,之后方便直接使用相关方法例如:
import re
group_by_regex = re.compile("JD请求异常返回: 商品列表中含有不能购买的商品\[(\d+)\]")
text = "JD请求异常返回: 商品列表中含有不能购买的商品[1322410]"
m = group_by_regex.search(text)
result = m.group(1)
这里必须多阐述一下,其实在上面匹配方法一中的第一个入参就是一个pattern,一个匹配模式。这里匹配方法二中我们首先创建了一个正则表达式的匹配模式group_by_regex。然后使用这个匹配模式的方法的search查找到第一个符合的对象就返回。
这里还有个需要注意的地方上面的match 和 这里的search有什么区别呢。
match是必须从开始就匹配上才算,而search不管这么多,他会扫描整个处理串里面有没有这个匹配对象而不必担心他是不是从头开始的。
那么如果想匹配对象中所有符合条件的呢?可以使用findall方法。
下面我们来看一些python里面特有的正则表现,比如说命名正则。
r'^actions/rate/(?P<model>\w+)/(?P<pk>[\w|\d]+)/-/(?P<location>\w+)/$
这里先重点来看这一句
/?P<model>\w+/
?P开头是一个python里独有的扩展语法,是python的命名组语法。有点像()捕捉器,但是是可以从model这个名字里面读取的。这句话就是<model> 是 w(类似但不等价于“[A-Za-z0-9_])类型的字符,捕捉1个或者多个。
知道了这个我来一并解释整句正则想要匹配什么。
/(?P<pk>[\w|\d]+)/-/(?P<location>\w+)/$
后面继续使用python命名组语法匹配pk,[\w|\d]+ 是匹配 [A-Za-z0-9_]其中的数字一个或者多个。其实这里写得应该有点问题,\w是包含\d的应该不用选择直接使用\w+就可以了。后面的/-/直接匹配“-”,然后后面又是一个命名组匹配location。这种语法在django的url模版的里面应该经常能见到。
更多处理方法可以参考python文档,最常用的就上面两种方法。
更加复杂和全面的用法可以参考引用2.
Reference:
http://www.cnblogs.com/sevenyuan/archive/2010/12/06/1898075.html
http://www.jb51.net/article/50511.htm python正则表达式re模块详细介绍
玩弄 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的一部分. 正则表达式是用于处理字符串的强大工具, 拥有自己独特的语法以及一个独立的处理引擎, 效率上 ...
随机推荐
- Redis学习笔记--Redis数据过期策略详解==转
本文对Redis的过期机制简单的讲解一下 讲解之前我们先抛出一个问题,我们知道很多时候服务器经常会用到redis作为缓存,有很多数据都是临时缓存一下,可能用过之后很久都不会再用到了(比如暂存sessi ...
- 市场不相信眼泪:AI第一股暴力裁员 惨了
近日,有网友在社交平台匿名爆料称,科大讯飞准备优化30%的正式员工. 还有人匿名爆料,科大讯飞无补助报销出差加班,迫使员工离职,并将矛头指向了一个叫“黄狗子”“黄国庆”的角色. 有媒体猜测,科大讯飞采 ...
- WebSocket原理与实践(三)--解析数据帧
WebSocket原理与实践(三)--解析数据帧 1-1 理解数据帧的含义: 在WebSocket协议中,数据是通过帧序列来传输的.为了数据安全原因,客户端必须掩码(mask)它发送到服务器的所有 ...
- PAT A1074 Reversing Linked List (25 分)——链表,vector,stl里的reverse
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...
- android 解决ScrollView中的子布局不能够填充整个ScrollView的情况。
在开发中如果你的xml文件的跟布局是ScrollView,在ScrollView中无论你写什么样的布局,其默认情况下都是不能填充整个布局的.也就是说你的ScrollView中的子布局设置fill_pa ...
- SkylineGlobe MFC C++ 开发示例代码
SkylineGlobe的SDK底层是跨平台的C++内核,面向不同平台封装原生的API,具有很高的执行效率, 下面是C++二次开发时的示例代码: #import "D:\Program Fi ...
- React-redux-saga
新建sagas.js import { takeEvery , put} from 'redux-saga/effects' import axios from 'axios'; import { G ...
- 创建一个宽高成比例的弹性div盒子
这里先提供一种,有更好的方法再补充. demo代码如下: <!DOCTYPE html> <html lang="en"> <head> < ...
- 一文详解如何用 TensorFlow 实现基于 LSTM 的文本分类(附源码)
雷锋网按:本文作者陆池,原文载于作者个人博客,雷锋网已获授权. 引言 学习一段时间的tensor flow之后,想找个项目试试手,然后想起了之前在看Theano教程中的一个文本分类的实例,这个星期就用 ...
- Jlink使用技巧之烧写SPI Flash存储芯片
前言 大多数玩单片机的人都知道Jlink可以烧写Hex文件,作为ARM仿真调试器,但是知道能烧写SPI Flash的人应该不多,本篇文章将介绍如何使用JLink来烧写或者读取SPI Flash存储器, ...