RE模块(正则)
RE模块和正则表达式
正则表达式
正则就是用来筛选字符串中的特定的内容的(只要是reg...一般情况下都是跟正则有关)
re模块与正则表达式之间的关系:
正则表达式不是python独有的 它是一门独立的技术
所有的编程语言都可以使用正则
但是如果你想在python中使用,你就必须依赖于re模块
正则表达式的测试工具:http://tool.chinaz.com/regex/
#字符组 : [字符组]
#在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示
#字符分为很多类,比如数字、字母、标点等等。一个字符串里面的表达式都是或的关系 #^ #匹配的是字符串的开头,例如:^a 就是匹配以a开头的
#[^] # 除了[]写的字符,其它都要 #$ #匹配的是字符串的结尾,例如:b$ 就是匹配以b结尾的 #^与$连用,会精准限制匹配的内容,两者中间些什么,匹配的字符串就必须是什么,多一个少一个都不行 #| #例如a|b就是字符a或者字符b,需要注意一定要将长的放在前面
#. #匹配除换行符以外的任意字符
#() # 匹配括号内的表达式,也表示一个组 #\w #\s #\d
#\w匹配字母或数字或下划线
#\s匹配任意的空白符
#\d匹配数字 #\W #\S #\D
#\W匹配非字母或数字或下划线
#\S匹配非数字
#\D匹配非空白符
#ps:如果[\w\W]、[\s\S]、[\d\D]这样使用,可以匹配到全部 #\n换行符
#\t制表符
#\b单词以什么结尾
量词必须跟在正则符号的后面,量词只能能够限制紧挨着它的那一个正则符号
分组:针对多个正则表达式,想统一用量词修饰,可以用括号()括起来。
贪婪匹配:在满足匹配时,匹配尽可能长的字符串,正则默认情况下,采用贪婪匹配
非贪婪匹配:可以在量词后面加上?取消默认的贪婪匹配
转义符\:在正则表达式中,有很多有特殊意义的是元字符,比如\n和\s等,如果要在正则中匹配正常的"\n"而不是"换行符"就需要对"\"进行转义,变成'\\'。
RE模块
#身份证号码是一个长度为15或18个字符的字符串,如果是15位则全部有数字组成,首位不能#为0;如果是18位,则前17位全部是数字,末位可能是数字或x,下面我们尝试用正则来表示: import re
phone_number = input('please input your phone number : ')
if re.match('^[1-9]\d{14}(\d{2}[0-9x])?$',phone_number):
print('是身份证号')
else:
print('不是身份证号')
#正则表达式分析
^[1-9]\d{14}(\d{2}[0-9x])?$
#^[1-9]第一位是1-9中的数字
#\d{14}第二到十四位匹配的是数字
#(\d{2}[0-9x])?$后三位可能出现一次,也可能不出现,出现的时候,后三位的前两位是数字,第三位可以是0-9的数字也可以是x #更清楚的写法
^([1-9]\d{16}[0-9x]|[1-9]\d{14})$
#第一位和之前相同
#后面通过|这个符号,也就是或,来进行两种情况的判断如果后面还有17位,则是有16位都是数字,最后一位可以是数字或者x,如果后面是14位,则14位都是数字
RE模块中的常用函数
import re #findall
res = re.findall('a','eva egon jason')
# findall('正则表达式','带匹配的字符串')
print(res)
# 找出字符串中符合正则表达式全部内容 并且返回的是一个列表,列表中的元素就是正则匹配到的结果
import re #search
res = re.search('a','eva egon jason')
print(res) # search不会给你直接返回匹配到的结果,而是给你返回一个对象
print(res.group()) # 必须调用group才能看到匹配的结果
"""
注意:
1.search只会依据正则查一次 只要查到了结果 就不会再往后查找
2.当查找的结果不存在的情况下,返回的是一个None 调用group直接报错
""" res1 = re.search('b','eva egon jason')
# search('正则表达式','带匹配的字符串')
if res1:
print(res1.group())
import re
res = re.match('a','eva egon jason')
print(res) # ('正则表达式','带匹配的字符串')
print(res.group())
"""
注意:
1.match只会匹配字符串的开头部分
2.当字符串的开头不符合匹配规则的情况下 返回的也是None 调用group也会报错
"""
import re ret = re.split('[ab]','abcd') # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
print(ret) # ['', '', 'cd'] 返回的还是列表 ret = re.sub('\d','H','eva3egon4yuan4',1) # 将数字替换成'H',参数1表示只替换1个
print(ret) # ('正则表达式','新的内容','待替换的字符串',n)
#先按照正则表达式查找所有符合该表达式的内容 统一替换成'新的内容' 还可以通过n来控制替换的个数 ret = re.subn('\d', 'H', 'eva3egon4yuan4') # 将数字替换成'H',返回元组(替换的结果,替换了多少次)
ret1 = re.subn('\d', 'H', 'eva3egon4yuan4',1) # 将数字替换成'H',返回元组(替换的结果,替换了多少次)
print(ret) # 返回的是一个元组 元组的第二个元素代表的是替换的个数
print(ret1) obj = re.compile('\d{3}') #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字
ret = obj.search('abc123eeee') #正则表达式对象调用search,参数为待匹配的字符串
res1 = obj.findall('')
print(ret.group()) #结果 : 123
print(res1) #结果 : ['347', '982', '734', '729', '349', '827', '384']
import re
ret = re.finditer('\d', 'ds3sy4784a') #finditer返回一个存放匹配结果的迭代器
print(ret) # <callable_iterator object at 0x10195f940>
print(next(ret).group()) # 等价于ret.__next__() 查看第一个结果
print(next(ret).group()) # 等价于ret.__next__() 查看第二个结果
print(next(ret).group()) # 等价于ret.__next__()
print(next(ret).group()) # 等价于ret.__next__()
print(next(ret).group()) # 等价于ret.__next__() 查出迭代取值的范围 直接报错
print([i.group() for i in ret]) #查看剩余的左右结果
import re
res = re.search('^[1-9](\d{14})(\d{2}[0-9x])?$','')
#还可以给某一个正则表达式起别名,起名的格式为 ?P<名字>
res = re.search('^[1-9](?P<password>\d{14})(?P<username>\d{2}[0-9x])?$','')
print(res.group())
print(res.group('password'))
print(res.group(1))
print(res.group('username'))
print(res.group(2))
#findall的优先级查询:
import re ret = re.findall('www.(baidu|oldboy).com', 'www.oldboy.com')
print(ret) # ['oldboy'] 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可 ?:就是告诉它你要拿到全部 ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com')
print(ret) # ['www.oldboy.com']
ret=re.split("\d+","eva3egon4yuan")
print(ret) #结果 : ['eva', 'egon', 'yuan'] ret=re.split("(\d+)","eva3egon4yuan")
print(ret) #结果 : ['eva', '3', 'egon', '4', 'yuan'] #在匹配部分加上()之后所切出的结果是不同的,
#没有()的没有保留所匹配的项,但是有()的却能够保留了匹配的项,
#这个在某些需要保留匹配部分的使用过程是非常重要的。
RE模块(正则)的更多相关文章
- Python全栈 正则表达式(re模块正则接口全方位详解)
re模块是Python的标准库模块 模块正则接口的整体模式 re.compile 返回regetx对象 finditer fullmatch match search 返回 match对象 match ...
- Python使用re模块正则式的预编译及pickle方案
项目上线要求当中有言论和昵称的过滤需求, 客户端使用的是python脚本, python脚本中直接利用re模块来进行正则匹配, 一开始的做法是开启游戏后, 每帧编译2条正则式, 无奈运营需求里面100 ...
- re模块(正则)
一, 什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法. 在python中,正则内嵌在python中,并通过re模块实现,正则表达模式被编译成一系列 ...
- python,re模块正则
python没有正则需要导入re模块调用.正则表达式是为了匹配字符串,动态模糊的匹配,只要有返回就匹配到了, 没返回就没匹配到,前面是格式后面是字符串 最常用的匹配语法: re.match()#麦驰, ...
- 反射,hashlib模块,正则匹配,冒泡,选择,插入排序
一.反射(自省) 首先通过一个例子来看一下本文中可能用到的对象和相关概念. import sys # 模块,sys指向这个模块对象import inspectdef foo(): pass # 函数, ...
- 常用模块-正则re
常用模块之正则模块 """ 正则表达式与re模块的关系 1.正则表达式是一门独立的技术,任何语言均可使用 2.python中要想使用正则表达式需要通过re模块 " ...
- python3 re模块正则匹配字符串中的时间信息
匹配时间: # -*- coding:utf-8 -*- import re def parseDate(l): patternForTime = r'(\d{4}[\D]\d{1,2}[\D]\d{ ...
- day19 python之re模块正则练习
1.匹配标签 import re ret = re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>" ...
- Python(re模块,正则)
day18 正则表达式用处? 匹配 字符串 s = 'hello world' print(s.find('llo'))#第一个的位置 ret = s.replace('ll','xx') print ...
- re模块与正则
一.正则 正则就是用来筛选字符串中的特定的内容 正则表达式与re模块的关系: 1.正则表达式是一门独立的技术,任何语言都可以使用 2.python中药想使用正则表达式需要通过调用re模块 正则应用场景 ...
随机推荐
- ZJNU 1531 - 丢手绢--中级
可以将相同的人数分块存在数组gp中先 例如RRGGGRBBBBRR 则gp[1~5]={2,3,1,4,2} 首先可以知道,如果要让没有相邻的相同,只需要每个gp[i]/2向下取整即可得出最少需要改变 ...
- python3拆包详解
对于可迭代对象,如元组.列表.字符串.集合.字典这些可迭代对象都可以被拆包,拆包是指将一个结构中的数据拆分为多个单独变量中.拆包的方式大致有两种,一种是以变量的方式来接收,另一种是用'*'号.下面先讲 ...
- 10. 通过 Dockerfile 编写 linux 命令行工具
测试 linux 压力的工具 一. 实际操作 1. 创建一个 ubuntu 的容器 docker run -it ubuntu 2. 安装 stress 工具 apt-get update & ...
- windows下隐藏文件夹
在cmd中找到文件夹所在的路径,然后执行以下命令 隐藏文件:attrib 文件名 +s +h 显示隐藏文件:attrib 文件名 -s -h 后记:attrib指令用于修改文件的属性,文件的常见属性有 ...
- Microsoft COCO 数据集
本篇博客主要以介绍MS COCO数据集为目标,分为3个部分:COCO介绍,数据集分类和COCO展示. 本人主要下载了其2014年版本的数据,一共有20G左右的图片和500M左右的标签文件.标签文件标记 ...
- 34)static 静态成员和静态成员函数
1) static修饰的方法,只能在这个文件中使用,比如你是多文件编程,别的文件即使引入了我的 .h文件 但那时我的static方法也是不能用 2)C++的static的成员变量 比如 sta ...
- SaltSatck常用指令一
1.查看版本号: salt --version [root@master ~]# salt --version salt (Fluorine) [root@master ~]# 2.显示依赖关系及版本 ...
- Codeforces1303F Number of Components
Description link 题意:给一个全\(0\)矩阵,每次支持一个修改,修改不还原(这要是还原了不就成\(A\)题了) 然后询问每一次修改完了当前矩阵的连通块个数 每一个修改的值单调不降 修 ...
- Django框架的前奏(安装及介绍)
几个重要的概念: web的本质: 浏览器中输入网址敲回车发生了几件事? 1.浏览器向服务端发送请求 2.服务端接收请求 3.服务端返回相应的响应 4.浏览器接收响应 根据特定的规则渲染页面展示给用户 ...
- Apsara Clouder云计算技能认证:云数据库管理与数据迁移
一.课程介绍 二.云数据库的简介及使用场景 1.云数据库简介 1.1特点: 用户按存储容量和带宽的需求付费 可移植性 按需扩展 高可用性(HA) 1.2阿里云云数据库 RDS 稳定可靠,可弹性伸缩的在 ...