python正则表达式之使用规则
正则表达式在我看来是提供一个模板,将待匹配的字符串与模板匹配,匹配不到则返回为空,匹配成功根据需要返回匹配的字符串。
正则表达式比字符串本身的功能要强一点,当然性能上略有不如。
我们使用正则表达式主要有两种目的,
> 是否包含模板字符串;
> 得到匹配字符串。
python 中使用正则表达式时需要引入“re”模块,为了避免记忆上的混乱,本文只记载一种最常用的使用正则表达式的方式。
使用流程:
# encoding:utf-8 # 引入re模块
import re #生成正则表达式模板
pat = re.compile(r'') #匹配结果
m=pat.search("123 12")
print m #匹配结果
m=pat.search("3 2")
print m # 输出:
# <_sre.SRE_Match object at 0x01FCFB48>
# None
match()和search()区别
在一些示例中,在匹配结果也会用到match方法,match和search的区别如下:
match :只从字符串的开始与正则表达式匹配,匹配成功返回matchobject,否则返回none;
search :将字符串的所有字串尝试与正则表达式匹配,如果所有的字串都没有匹配成功,返回none,否则返回matchobject;
示例如下:
pat = re.compile(r'') m=pat.search("")
print m
# <_sre.SRE_Match object at 0x01FCFB48> m=pat.match("")
print m
# None m=pat.match("")
print m
# <_sre.SRE_Match object at 0x01FCFB48>
分组的概念和findall()
当我们想将符合正则规则的字符串提取时,可以用()将规则包起来即可。例如:我们想提取超链接
pat = re.compile(r'href="([^"]*)"')
s = '<a href="http://www.qidian.com/">起点中文</a>'
m = pat.search(s)
print m.group(0)
# href="http://www.qidian.com/
print m.group(1)
# http://www.qidian.com/
“()”表示我们想要提取的字符串内容,用group()函数方法取得,group(0) 取得匹配的字符串,group(1)取得第一个分组。
当要取得所有符合规则的字符串时我们可使用findall()方法
pat = re.compile(r'href="([^"]*)"')
s = '<a href="http://www.qidian.com/">起点中文</a><a href="http://www.qidian.com/">起点中文</a>'
m = pat.findall(s)
print m
#['http://www.qidian.com/', 'http://www.qidian.com/']
此时若匹配返回的结果是一个list。
反斜杠的困扰
pat = re.compile(r'href="([^"]*)"')
正则里面有个‘r’是原生字符串的意思,它表示不转义,例如:
path="c:\noway"
print path
# c:
# oway
path=r"c:\noway"
print path
# c:\noway
正则表达式用”\\”表示反斜杠符号,因此当要匹配字符串中的“\\”时需要用“\\\\”,前两个表示一个反斜杠即转义字符,后两个表示真正的反斜杠。当加上前缀r时,就只用“\\”匹配反斜杠。
示例如下:
re_str_patt = "\\\\"
reObj = re.compile(re_str_patt)
str_test = "abc\\cd\\hh"
print reObj.findall(str_test)
# ['\\', '\\']
r_str_patt = r"\\"
print reObj.findall(str_test)
# ['\\', '\\']
python正则表达式之使用规则的更多相关文章
- python 正则表达式规则收集
python正则表达式基本元字符 . 通配符,匹配所有字符 ^abc 匹配以abc开始的字符串 abc$ 匹配以abc结尾的字符串 [abc] 匹配字符集合 [A-Z0-9] 匹配字符范围 ...
- Python 正则表达式入门(中级篇)
Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...
- Python 正则表达式入门(初级篇)
Python 正则表达式入门(初级篇) 本文主要为没有使用正则表达式经验的新手入门所写. 转载请写明出处 引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达 ...
- 比较详细Python正则表达式操作指南(re使用)
比较详细Python正则表达式操作指南(re使用) Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式.Python 1.5之前版本则是通过 regex 模块提供 E ...
- Python天天美味(15) - Python正则表达式操作指南(re使用)(转)
http://www.cnblogs.com/coderzh/archive/2008/05/06/1185755.html 简介 Python 自1.5版本起增加了re 模块,它提供 Perl 风格 ...
- Python正则表达式Regular Expression基本用法
资料来源:http://blog.csdn.net/whycadi/article/details/2011046 直接从网上资料转载过来,作为自己的参考.这个写的很清楚.先拿来看看. 1.正则表 ...
- Python 正则表达式 (python网络爬虫)
昨天 2018 年 01 月 31 日,农历腊月十五日.20:00 左右,152 年一遇的月全食.血月.蓝月将今晚呈现空中,虽然没有看到蓝月亮,血月.月全食也是勉强可以了,还是可以想像一下一瓶蓝月亮洗 ...
- 爬数据,能让你少写1000行代码的捷径! | Python 正则表达式
▌春暖花开,又到了出门游玩拍拍拍吃吃吃的好季节了! 说到拍照摄影,你会构图吗?就是在照片有限的空间内处理人.景.物的关系,并将三者安排在画面中最佳的位置,以形成画面特定结构的方法. 学院君就是一个「拍 ...
- python正则表达式基础,以及pattern.match(),re.match(),pattern.search(),re.search()方法的使用和区别
正则表达式(regular expression)是一个特殊的字符序列,描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子字符串. 将匹配的子字符串替换或者从某个字符串中取出符合某个条件 ...
随机推荐
- Delphi XE6 for Android 让手机震动(调用Java的函数)
震动,是调用了 安卓api JNI 里面的 函数 ,这些都是 调用java的 ,如下面的引用, uses FMX.Helpers.Android, Androidapi.JNI.App, A ...
- AlgorithmsI Programming Assignment 1: Percolation
3种版本的答案,第一种使用virtual top and bottom site, 但有backwash的问题,解决这个问题有两种方法: 1. 使用2个WQUUF, 但会增加memory. One f ...
- 开源的excel读取库libxls在windows下的编译,且支持中文,全网首发
转载请注明出处:http://www.cnblogs.com/superbi/p/5482516.html 到目前为止,网络和官网上并没有关于libxls在windows下支持中文的教程,也没有现成的 ...
- Java---实现运行任意目录下class中加了@MyTest的空参方法(实现图形界面)
说明: 因为上个代码,总是要输入完整的绝对路径,比较麻烦,于是,就写了这个小程序,直接进入文件对话框选择需要运行的class文件. 只需要提前输入完整的类名. 注意:加的MyTest必须打个包,加上: ...
- HDOJ(HDU) 2143 box(简单的多次判断-用的卫条件)
Problem Description One day, winnie received a box and a letter. In the letter, there are three inte ...
- WEB性能测试:你应该带上VisualStudio2010
原文地址:http://www.16aspx.com/Article/62 在Web性能测试方面,增加了循环(Loops)和条件(Conditions),让开发人员可以为他们的应用程序写出更复杂,更智 ...
- 尚学堂 JAVA Day13 abstract 关键字
Abstract (抽象的) 这是一个关键字. 可以且只可以 用来修饰 <类> <方法>. 1---Abstract 类 如:Animal,可以被理解一个抽象的类.动物嘛,只是 ...
- angularJs $injector
一 angularJS中几种注入方式 Spring中使用构造注入或者设值注入的方式,还需要做一些额外的操作,但是angular中只需要在需要的地方声明一下即可,类似模块的引用,因此十分方便. angu ...
- 根据类名查所属jar包
在开发时经常会参考一些现有的例子,但有些例子只有代码,代码中引用的类所属的jar包却没有明确说明,如何找到一个类所属的jar包,可以通过访问以下网址解决:http://www.findjar.com
- msyql 字节问题
MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定).在 MySQL5.0以上的版本中,varchar数据 ...