1、简单的正则表达式

import re
s=r'abc'
re.findall(s,"aaaaaaaaaaaaaaa") #结果为[]
re.findall(s,"abcaaaaaaaaaaaa") #结果为['abc']
re.findall(s,"abcaaaaaabcaaaa") #结果为['abc','abc']

2、元字符

[] :指定一个字符集  例如:r't[io]p'  满足的字符串包括'tip'或'top'

  加上^表示取反  例如:r't[^io]p'  满足的字符串包括除'tip'或'top'之外的字符串

^ :匹配行首  r'^abc'  r'\^abc'

$ :匹配行尾

\ :\d=[0-9],\D=[^0-9],\s=[\t\n\r\f\v],\S=[^\t\n\r\f\v],\w=[a-zA-Z0-9],\W=[^a-zA-Z0-9]

  \[或\\取消所有的元字符

. :匹配任意字符

* :匹配零次或多次

+ :匹配一次或多次

?  :匹配一次或零次  例如:r"^010-?\d{8}$"

r=r"ab+?"    #'+?'是最小匹配模式,非贪婪模式
re.findall(r,'abbbbbbbb') #结果是'ab'

{} :{m,n}最少重复m次,最多重复n次 {0,}=* {1,}=+ {0,1}=?

() :分组,经常和‘|’一起使用,例如email的正则表达式r'\w{3}@\w+(\.com|\.cn)'

  注意:findall匹配的正则表达式中有分组,先返回匹配分组中的数据

例如:

s='adjadlk hello src=csvt yes jojjlk  jlij hello src=python yes jopm'
r1=r'hello src=.+ yes'
re.findall(r1,s) #结果['hello src=csvt yes','hello src=python yes']
r1=r'hello src=(.+) yes'
re.findall(r1,s) #结果['csvt','python']

|

3、正则表达式的编译

编译后的正则表达式效率比编译前的要高许多,例如:

#匹配电话号码
r1=r"\d{3,4}-?\d{8}"
p_tel=re.compile(r1) #编译后的正则表达式效率要高很多
p_tel.findall('010-12345678')

编译时,可以加一些参数,用来实现特殊功能和语法变更,例如:

csvt_re=re.compile(r'csvt',re.I)   #re.I表示在编译时忽略大小写
csvt_re.findall('CSVT') #结果是['CSVT']
csvt_re.findall('csvt') #结果是['csvt']
csvt_re.findall('CsVt') #结果是['CsVt']

4、执行匹配

(1)match():决定RE是否在字符串刚开始的位置匹配。未匹配,返回None;否则,返回MatchObject对象

   MatchObject实例方法

    group():返回被RE匹配的字符串

    start():返回匹配开始的位置

    end():返回匹配结束的位置

    span():返回一个元组包含匹配(开始,结束)的位置

  实际程序中,最常见的做法是将MatchObject保存在一个变量中,然后检查他是否为None

(2)search():扫描字符串,找到这个RE匹配的位置。未匹配,返回None;否则,返回MatchObject对象

(3)findall():找到RE匹配的所有子串,并把他们作为一个列表返回

(4)finditer():找到RE匹配的所有子串,并把他们作为一个迭代器返回

5、模块级函数:match()、search()、sub()、subn()、split()、findall()等

(1)sub()用法举例:

rs=r'c..t'
re.sub(rs,'python','csvt caat cvvt cccc') #结果'python python python cccc'

(2)subn()用法,返回值中比sub()多了一个数据,表示一共替换了多少次,比如

rs=r'c..t'
re.sub(rs,'python','csvt caat cvvt cccc') #结果('python python python cccc',3)

(3)split()的用法

s='121+334-34*33/44'
re.split(r'[\+\-\*/]',s) #结果['121','334','34','33','44']

6、编译标志-flags

Python学习 之 正则表达式的更多相关文章

  1. [Python学习笔记]正则表达式总结

    常用缩写字符及其含义表格查询 缩写字符分类 含义 \d 0-9的任意数字 \D 除0-9的数字以外的任何字符 \w 任何字母.数字或下划线字符(可以认为是匹配"单词"字符) \W ...

  2. Python学习笔记——正则表达式入门

    # 本文对正则知识不做详细解释,仅作入门级的正则知识目录. 正则表达式的强大早有耳闻,大一时参加一次选拔考试,题目就是用做个HTML解析器,正则的优势表现得淋漓尽致.题外话不多讲,直接上干货: 1. ...

  3. Python学习--16 正则表达式

    正则表达式是一种描述性的语言,用来匹配字符串.凡是符合规则的字符串,我们认为就是匹配了. 正则表达式并非Python独有的,它与语言无关.很多语言都支持正则表达式. 我们经常用正则表达式来匹配电子邮件 ...

  4. python学习日记(正则表达式)

    定义 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Pyth ...

  5. python学习笔记----正则表达式

    正则: regular expression 常用的场景: #正则的包 >>> import re #match:开头匹配,匹配到,返回一个匹配对象,否则返回None >> ...

  6. python学习笔记——正则表达式regex

    1 概述 1.1 定义 本质是由一系列字符和特殊符号组成的字串,用来表示一定规则的某一类字符串. 1.2 特点 正则表达式是一个独立的技术,其在多种编程语言中使用. 在python语言中的正则表达式模 ...

  7. Python学习 :正则表达式

    正则表达式 python 使用正则表达式(re)来进行匹配引擎搜索 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串” 关于正则表达式 ...

  8. python 学习总结----正则表达式

    正则表达式 应用场景 - 特定规律字符串的查找,切割,替换 - 邮箱格式:URl,IP地址等的校验 - 爬虫项目中,特定内容的提取 使用原则 - 只要使用字符串等函数能解决的问题,就不要使用正则 - ...

  9. python学习-53 正则表达式

    正则表达式 就其本质而言,正则表达式是一种小型的/高度专业化的编程语言,它内嵌在python中,并通过RE模块实现,正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行. 1.元字符 - ...

随机推荐

  1. bjfu1238 卡特兰数取余

    题目就是指定n,求卡特兰数Ca(n)%m.求卡特兰数有递推公式.通项公式和近似公式三种,因为要取余,所以近似公式直接无法使用,递推公式我简单试了一下,TLE.所以只能从通项公式入手. Ca(n) = ...

  2. Front-End-Develop-Guide

    这份文件包含一系列用于面试审查求职者(候选人)的前端面试问题.这并不推荐把每个问题都问在同一个求职者(因为这会花几个小时的时间).从列表中抽取一些问题能够帮助你审查你需要求职者具备的一些技能. 注: ...

  3. qt 在指定区域添加图片

    博客出处:http://www.devdiv.com/thread-39111-1-1.html 折腾了几天,终于实现了图片的淡出淡入的效果. 其实也应该是说实现了图片的淡入效果,因为淡出效果我暂时还 ...

  4. Python pycurl

    常用方法: pycurl.Curl() #创建一个pycurl对象的方法 pycurl.Curl(pycurl.URL, http://www.google.com.hk) #设置要访问的URL py ...

  5. ORA-15063: ASM discovered an insufficient number of disks for diskgroup "ASM,KEL"

    在启动ASM的时候报错,报错如下: SQL> startup ASM instance started Total System Global Area 130023424 bytes Fixe ...

  6. bzoj 1458 士兵占领(最大流)

    [题意] n行m列,第i行必须放L[i],第j列必须放C[j],有障碍格,求满足条件至少需要放多少. [思路] 至少放多少等价于最多不放多少. 对行列分别建XY点,则连边(S,Xi,a)(Yi,T,b ...

  7. (原创)spring mvc和jersey rest 组合使用时单例对像实例化两次的BUG及解决办法

    项目中没用spring 的restTemplate 而是采用 jersey来做rest 的实现,一直用着,也没发现有什么不对,后来加入了,以quartz用硬编码方式实现,结果启动项目的时候报错 ,具体 ...

  8. ubuntu下通过pip安装pyside

    首先安装相关库 sudo apt-get install build-essential git cmake libqt4-dev libphonon-dev python2.7-dev libxml ...

  9. hibernate 连接数据库时报错

         错误信息 : com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allo ...

  10. Makefile 知识点

    $@ $@ is the name of the target. $? The $? macro stores the list of dependents more recent than the ...