正则表达式在我看来是提供一个模板,将待匹配的字符串与模板匹配,匹配不到则返回为空,匹配成功根据需要返回匹配的字符串。

正则表达式比字符串本身的功能要强一点,当然性能上略有不如。

我们使用正则表达式主要有两种目的,

       > 是否包含模板字符串;

       > 得到匹配字符串。

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正则表达式之使用规则的更多相关文章

  1. python 正则表达式规则收集

    python正则表达式基本元字符 .   通配符,匹配所有字符 ^abc  匹配以abc开始的字符串 abc$  匹配以abc结尾的字符串 [abc]  匹配字符集合 [A-Z0-9] 匹配字符范围 ...

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

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

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

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

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

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

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

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

  6. Python正则表达式Regular Expression基本用法

    资料来源:http://blog.csdn.net/whycadi/article/details/2011046   直接从网上资料转载过来,作为自己的参考.这个写的很清楚.先拿来看看. 1.正则表 ...

  7. Python 正则表达式 (python网络爬虫)

    昨天 2018 年 01 月 31 日,农历腊月十五日.20:00 左右,152 年一遇的月全食.血月.蓝月将今晚呈现空中,虽然没有看到蓝月亮,血月.月全食也是勉强可以了,还是可以想像一下一瓶蓝月亮洗 ...

  8. 爬数据,能让你少写1000行代码的捷径! | Python 正则表达式

    ▌春暖花开,又到了出门游玩拍拍拍吃吃吃的好季节了! 说到拍照摄影,你会构图吗?就是在照片有限的空间内处理人.景.物的关系,并将三者安排在画面中最佳的位置,以形成画面特定结构的方法. 学院君就是一个「拍 ...

  9. python正则表达式基础,以及pattern.match(),re.match(),pattern.search(),re.search()方法的使用和区别

    正则表达式(regular expression)是一个特殊的字符序列,描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子字符串. 将匹配的子字符串替换或者从某个字符串中取出符合某个条件 ...

随机推荐

  1. 【HDOJ】2757 Ocean Currents

    简单BFS. /* 2757 */ #include <iostream> #include <queue> #include <cstdio> #include ...

  2. Unity 通过Animation实现控件位置的转换

    Unity版本:4.5.1 NGUI版本:3.6.5 参考链接:http://blog.csdn.net/unity3d_xyz/article/details/23035521,作者:CSDN in ...

  3. 一键安装mysql5.6

    #!/bin/bash # @Name:install_mysql.sh # @Author:Eivllom # @Create -- # @Modify -- app_soft="/app ...

  4. 【二分】【最长上升子序列】HDU 5489 Removed Interval (2015 ACM/ICPC Asia Regional Hefei Online)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5489 题目大意: 一个N(N<=100000)个数的序列,要从中去掉相邻的L个数(去掉整个区间 ...

  5. VMware连不上网解决

    在VMware里安装了ubuntu,但是某一天打开它,ubuntu忽然不能上网了,于是百度了好几个方法,最后是这样解决的: 额...现在连接的是无线,前两天出问题的时候连接的是有线,在Internet ...

  6. SRM 502(2-1000pt)

    题意:在0~(n-1)中选择k个数,使得他们的和为n的倍数的选择方案有多少种.(n <= 1000, k <= 47) 解法:裸dp.d[i][j][k’]表示在前i个数中(0~i-1), ...

  7. Web 测试笔记

    测试难点 主要是模块之间的同步问题. 测试容易忽略的地方 1. 各种标题.包括页面“标签页”的标题,弹出框的标题.由于开发经常直接用之前的页面,比如编辑可能直接用新增的页面,导致标题出错. 2. 最大 ...

  8. centos 5 yum安装与配置vsFTPd FTP服务器

    vsftpd作为FTP服务器,在Linux系统中是非常常用的.下面我们介绍如何在centos系统上安装vsftp. 什么是vsftpd vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序 ...

  9. 什么是method swizzling

    其实跟字面的意思很相近.方法的调和.可以去修改oc中两个方法的调用. 这张图看起来会比较形象 20130718230430859.png 就是把两个实现调换具体的做法,首先,用Categroy建立自己 ...

  10. UIView和CALayer有什么关系

    view是对layer的一种封装,你对view的很多操作事实上是对layer的操作,之所以会出现这两个东西是因为1.view支持很多手势的交互,你所操作iphone的各种点击,拖动等等.2.layer ...