re 模块 正则表达式
re模块(正则表达式)
一、什么是正则表达式
正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。
二、正则表达式基础
字符组 : [字符组]
在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示 字符分为很多类,比如数字、字母、标点等等。
1 [1] 匹配1 2 [123] 匹配1、2、3 3 [0-9] 匹配任意一个数字 4 [a-z] 匹配任意一个小写字母 5 [A-Z] 匹配任意一个大写字母 6 [A-Za-z] 匹配任意一个字母
示例如下:

1 print(re.findall('[1]','Zll5201314')) #['1', '1'] 2 print(re.findall('[123]','Zll5201314')) #['2', '1', '3', '1'] 3 print(re.findall('[0-9]','Zll5201314')) #['5', '2', '0', '1', '3', '1', '4'] 4 print(re.findall('[a-z]','Zll5201314')) #['l', 'l'] 5 print(re.findall('[A-Z]','Zll5201314')) #['Z'] 6 print(re.findall('[a-zA-Z]','Zll5201314')) #['Z', 'l', 'l'] 7 print(re.findall('[A-Za-z0-3]','Zll5201314')) #['Z', 'l', 'l', '2', '0', '1', '3', '1']

元字符:

1 . 匹配除换行符以外的任意字符 2 \w 匹配字母或者数字或者下划线 3 \s 匹配任意空白字符 4 \d 匹配数字 5 \n 匹配换行符 6 \t 匹配制表符tab 7 \b 匹配一个单词的结尾 8 ^ 匹配字符串的开始 9 $ 匹配字符串的结尾 10 \W 匹配非字母或下划线或数字 11 \D 匹配非数字 12 \S 匹配非空白符 13 | 匹配|前或者后的内容 14 () 匹配括号内的表达式,也表示一个组

示例如下:

1 print(re.findall('.','love_u 520')) #['l', 'o', 'v', 'e', '_', 'u', ' ', '5', '2', '0'] 2 print(re.findall('\w','love_u 520')) #['l', 'o', 'v', 'e', '_', 'u', '5', '2', '0'] 3 print(re.findall('\s','love_u 520')) #[' '] 4 print(re.findall('\d','love_u 520')) #['5', '2', '0'] 5 print(re.findall('\n','love_u 520')) #[] 6 print(re.findall('\b','love_u 520')) #[] 7 print(re.findall('^l','love_u 520')) #['l'] 8 print(re.findall('520$','love_u 520'))#['520'] 9 print(re.findall('\W','love_u 520')) #[' '] 10 print(re.findall('\D','love_u 520')) #['l', 'o', 'v', 'e', '_', 'u', ' '] 11 print(re.findall('\S','love_u 520')) #['l', 'o', 'v', 'e', '_', 'u', '5', '2', '0'] 12 print(re.findall('love|u','love_u 520')) #['love', 'u']

量词:
1 * 重复零次或者多次 2 + 重复1次或者多次 3 ? 重复零次或者一次 4 {n} 重复n次 5 {n,} 重复n次或者更多次 6 {n,m} 重复n到m次
示例如下:
1 print(re.findall('5*','555 5')) #['555', '', '5', ''] 2 print(re.findall('5+','555 5')) #['555', '5'] 3 print(re.findall('5?','555 5')) #['5', '5', '5', '', '5', ''] 4 print(re.findall('5{2,3}','555 5')) #['555'] 5 print(re.findall('5{2}','555 5')) #['55'] 6 print(re.findall('5{3}','555 5')) #['555']
三、常见的正则表达式应用

1 手机号(国内):^[1-9][3478]\d{9} 2 电话号(国内):[0-9-()()]{7,18} 3 邮编:\d{6} 4 QQ:[1-9]([0-9]{5,11}) 5 身份证号:\d{17}[\d|x]|\d{15} 6 邮箱:\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14} 7 网址:^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+ 8 日期:\d{4}(\-|\/|.)\d{1,2}\1\d{1,2} 9 用户名:[A-Za-z0-9_\-\u4e00-\u9fa5]+
#正则表达式在线测试网址“http://tool.chinaz.com/regex/”

四、python中如何使用正则表达式
findall()方法:
此方法是在整个字符串中匹配指定字符或者字符串,并且将所有满足条件的结果返回到一个列表中,如下:
1 ret = re.findall('a','abac') 2 print(ret) #['a', 'a']
3 ret = re.findall('ab','abac') 4 print(ret) #['ab']
search()方法:
此方法是在整个字符串中查找满足匹配条件的字符或者字符串,一旦找到一个就不再继续查找,并返回包含查找值的对象,可以用.group()方法进行查看,如下:
1 ret = re.search('a','abac') 2 print(ret.group()) #a
match()方法:
此方法是用来从开头位置查找是否满足匹配条件,如果没有就会返回None,如果有,则会返回一个包含查找值的对象,可以用group()方法进行查看,如下:
1 ret = re.match('a','abac') 2 print(ret.group()) #a 3 4 ret = re.match('b','abac') 5 print(ret) #None
split()方法:
此方法用来对一个字符串进行切分,如下:
1 ret = re.split('[ab]', 'abcd') # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割 2 print(ret) # ['', '', 'cd']
sub()以及subn()方法:

1 ret = re.sub('\d', '*', 'a1b2c3')#将数字替换成'*',默认替换所有的数字 2 print(ret) #a*b*c* 3 4 ret = re.sub('\d', '*', 'a1b2c3', 1)#将数字替换成'*',参数1表示只替换1个 5 print(ret) #a*b2c3 6 7 ret = re.subn('\d', '*', 'a1b2c3')#将数字替换成'*',返回一个元祖(替换后的字符串,替换的次数) 8 print(ret) #('a*b*c*', 3)

compile()方法:
此方法是先把正则表达式编译好,以方便多次使用,如下:
1 obj = re.compile('\d{3}') #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字 2 ret = obj.search('abc123eeee') #正则表达式对象调用search,参数为待匹配的字符串 3 print(ret.group()) #结果 : 123
finditer()方法:
此方法与findall类似,只不过返回的不是一个列表,而是一个生产器,可以用next(iter).group()来查看里面的值,如下:
1 ret = re.finditer('\d', 'ds3sy4784a') #finditer返回一个存放匹配结果的迭代器 2 print(ret) # <callable_iterator object at 0x10195f940> 3 print(next(ret).group()) #查看第一个结果 4 print(next(ret).group()) #查看第二个结果 5 print([i.group() for i in ret]) #查看剩余的左右结果
re 模块 正则表达式的更多相关文章
- Python中的re模块--正则表达式
Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...
- 【Python开发】Python之re模块 —— 正则表达式操作
Python之re模块 -- 正则表达式操作 这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式 ...
- sys,os,模块-正则表达式
# *__conding:utf-8__* """"我是注释""" sys,os模块 import sysimport os pr ...
- Python之re模块 —— 正则表达式操作
这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突, ...
- Python re模块 正则表达式
1 简介 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C ...
- s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译
时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...
- Python3 re模块(正则表达式)
一:什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. (在Python中)它内嵌在Python中,并通过r ...
- re模块正则表达式
regular expression / regex / RE 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配.Python 自1.5版本起增加了re 模块,它提供 ...
- re模块 - 正则表达式 疏理(一)
在网上总是很难找到令自己比较满意的,关于正则表达式的文章.所以决定自己来总结一波,并配上相应的示例. 正则表达式:定义了规则,用来字符串处理. 用途: 1.匹配 - 符合规则的字符串,则认为匹配了. ...
随机推荐
- MySQL select into
MYSQL不支持: Select * Into new_table_name from old_table_name; Create table new_table_name (Select * fr ...
- 一次对象过大引起的gc性能问题的分析与定位
现象:一个接口在4C的机器上跑最大只有7TPS,CPU使用率就已经90%多. 定位: 1. 使用top命令查看CPU使用情况,找到进程号 2. 使用top -H -pid命令,查看进程信息,看到有 ...
- /etc/services保存了服务、端口、协议
- 【java设计模式】【创建模式Creational Pattern】工厂方法模式Factory Method Pattern(多态性工厂模式Polymorphic Factory Pattern、虚拟构造子模式Virtual Constructor Pattern)
public class Test { public static void main(String[] args){ Creator ca=new ConcreteCreatorA(); ca.cr ...
- iOS中self与_的区别
同时我们发现在我们访问我们声明的变量时,会有self. 和 以"_"开头的访问方式,那么这两种方式到底有什么样的区别呢? 我们来一起看一下: @property (retain, ...
- 正则表达式 cheat sheet
- iView的使用【小白向】
首先看这篇:构建Vue本地开发环境(现阶段还不知道怎么用CDN的方式做...) 安装iView(WindowsPowershell或cmd下用cnpm) 编辑上一篇博客创建的Vue工程 先到main. ...
- chattr 命令详解
chattr 作用: 改变文件属性,这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有一下8种模式 模式: a: 让文件或目录仅供附加用途 b: 不更新文件或目录的最后存取时间 ...
- lesson - 4 Linux目录文件管理
内容概要:1. 和目录相关的几个命令mkdir 关注-p选项 rmdir 同样也有一个-p选项rm -r -f 两个常用选项cp -r 针对目录, 有时我们使用/bin/cpmv 重命名或者移动, 有 ...
- 豹哥嵌入式讲堂:ARM开发中有用的文件(1)- source文件
大家好,我是豹哥,猎豹的豹,犀利哥的哥.今天豹哥给大家讲的是嵌入式开发里的source文件种类. 众所周知,嵌入式开发属于偏底层的开发,主要编程语言是C和汇编.所以本文要讲的source文件主要指的就 ...