re 模块与正则表达式
re 模块
正则表达式与re模块的关系
1:正则表达式是一门独立的技术。
2:正则在任何语言中均可以使用。
3:python中要想使用正则表达式需要通过re模块。
正则表达式
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
- 元字符
| 元字符 | 匹配内容 |
|---|---|
| . | 匹配除换行符意外的任意字符 |
| \w | 匹配字母或数字或下划线 |
| \s | 匹配任意空白符 |
| \d | 匹配数字 |
| \n | 匹配一个换行符 |
| \t | 匹配一个制表符 |
| \b | 匹配一个单词的结尾 |
| ^ | 匹配字符串的开始 |
| $ | 匹配字符串的结尾 |
| \W | 匹配非字符或数字或下划线 |
| \D | 匹配非数字 |
| \S | 匹配非空白符 |
| a|b | 匹配字符 a 或 字符 b |
| () | 匹配括号内的表达式,也表示一个组 |
| [...] | 匹配字符组中的字符 |
| [^...] | 匹配除了字符组中字符的所有字符 |
- 量词
| 量词 | 用法说名 |
|---|---|
| * | 重复零次或更多次 |
| + | 重复一次或更多次 |
| ? | 重复零次或一次 |
| {n} | 重复 n 次 |
| {n,} | 重复 n 次或更多次 |
| {n,m} | 重复 n 次到 m 次 |
有无正则校验的区别
# 纯python代码校验
while True:
phone_number = input('请输入你的手机号码>>>:').strip()
if len(phone_number) == 11 \
and phone_number.isdigit() \
and(phone_number.startswith('13')) \
or(phone_number.startswith('14')) \
or(phone_number.startswith('15')) \
or(phone_number.startswith('16')) \
or(phone_number.startswith('17')) \
or(phone_number.startswith('18')):
print('手机号码格式正确')
else:
print('手机号码格式不正确')
# 正则表达式校验
import re
phone_number = input('请输入你的手机号码>>>:').strip()
if re.match('^(13|14|15|16|17|18)[0-9]{9}$',phone_number):
print('手机号码格式正确')
else:
print('手机号码格式不正确')
正则表达式在线测试
仅仅是测试正则表达式:http://tool.chinaz.com/regex/
正则表达式应用场景:爬虫,数据分析
正则表达式符号:
- 字符组 []
一个字符串里面的表达式都是域的关系
- ^ 与 $ 符连用
两者中间写什么,匹配的字符串就必须是什么,多一个不行少一个也别想,会精准限制配置的内容。
- abc|ab
用 | 的时候一定要将长的放前面。
- ,[]
直接写在外面,限制字符串的开头,[]取反。
- 分组 ()
当多个正则符号需要重复多次的时候或者当作一个整体进行其他操作,那么就可以用分组的形式。
了解:
- \w,\s,\d 与 \W,\S,\D 相反的匹配关系(两者结合就是匹配全部)
- \t 匹配制表符(Tab)
- \b 匹配结尾idea指定单词
量词:
- +:在 \d 中,如果有 123456 ,\d 只能匹配到一个数字,但是加上 + 后,就可以一次性全部匹配。+ 表示重复一次或者多次,在正则中默认都是贪婪匹配(越多越好)。
- *:匹配 0 次或多次
- ?:匹配 0 次或一次
- {n}:明确指定可匹配的个数
注意:
1:正则在匹配的时候默认都是贪婪匹配(尽量匹配多的)。可以通过符号 ? 就可以将贪婪匹配变成非贪婪匹配(惰性匹配)。
2:量词必须跟在正则符号的后面。
3:量词只能够限制紧挨着它的那一个正则符号。
re 模块的基本使用
正则表达式是用来匹配处理字符串的,python中使用正则表达式需要引入 re 模块
- findall
import re
res = re.findall('a','apple apple apple') # 返回所有满足匹配条件的结果,放在列表里。
print(res)
# ['a', 'a', 'a']
- search
import re
res = re.search('a','Apple apple apple') # 函数会在字符串中查找匹配,找到第一个匹配和返回一个包含匹配信息的对象。
print(res)
print(res.group()) # 如调用 group 可以取出返回的对象,如果返回的是None就会直接报错
if res: # 当返回值为 None 时,就不会执行 group,不会报错
print(ret.group())
# <_sre.SRE_Match object; span=(5, 6), match='a'>
# a
- match
import re
res = re.match('a','apple apple apple')
print(res)
print(res.group())
# match是从头开始匹配,如果正则规则从头开始可以匹配上,就返回一个对象,需要用group才能显示,如果没匹配上就返回None,调用group()就会报错
# <_sre.SRE_Match object; span=(0, 1), match='a'>
# a
其他方法
- split
import re
res = re.split('[ab]','abcd') # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
print(res)
# ['', '', 'cd']
- sub
import re
res = re.sub('\d','A','apple1apple2apple3') # 将字符串中的数字替换成'A'
res1 = re.sub('\d','A','apple1apple2apple3',1) # 参数1表示替换1个
print(res)
print(res1)
# appleAappleAappleA
# appleAapple2apple3
- subn
import re
res = re.subn('\d','A','apple1apple2apple3') # 将数字替换成'A'后,返回元组(替换结果,替换个数)
print(res)
# ('appleAappleAappleA', 3)
- compile
import re
obj = re.compile('\d{3}') # 将正则表达式编译成一个正则表达式对象,规定要匹配的是3个数字
res = obj.search('app111app') # 正则表达式对象调用 search,参数为待匹配的字符串
print(res.group())
# 111
- finditer
import re
res = re.finditer('\d','1apple2apple3456') # finditer 返回一个存放匹配结果的迭代器
print(res)
print(next(res).group()) # 查看第一个结果
print(next(res).group()) # 查看第二个结果
print([i.group() for i in res]) # 查看剩余的结果
# <callable_iterator object at 0x00000070AA9CC438>
# 1
# 2
# ['3', '4', '5', '6']
re 模块与正则表达式的更多相关文章
- re模块(正则表达式)
re 模块:正则表达式import re 内置模块: 1> re.match(pattern,string) pattern:就是正则表达式 string:被操作的对象 match,search ...
- python常用模块(1):collections模块和re模块(正则表达式详解)
从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来 ...
- 20、collections模块和re模块(正则表达式详解)
从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来 ...
- python模块部分 re模块 之正则表达式
python 全栈开发 1.什么是模块 2.正则表达式 一.什么是模块? 1.模块: 是一组功能的集合 你要和一个东西打交道,但是这个东西本身和python没有关系,这个东西本身就存在, 这时,pyt ...
- Python的re模块,正则表达式书写方法
Python的re模块,正则表达式 #导入re模块 import re 1.match方法的使用: result = re.match(正则表达式,待匹配的字符串) 正则表达式写法: 第一部分: 字 ...
- Python的re模块,正则表达式用法详解,正则表达式中括号的用法
Python的re模块,正则表达式 #导入re模块 import re 1.match方法的使用: result = re.match(正则表达式,待匹配的字符串) 正则表达式写法: 第一部分: 字 ...
- re模块,正则表达式起别名和分组机制,collections模块,time与datetime模块,random模块
re模块和正则表达式别名和分组机制 命名分组 (1)分组--可以让我们从文本内容中提取指定模式的部分内容,用()来表示要提取的分组,需要注意的是分组 是在整个文本符合指定的正则表达式前提下进行的进一步 ...
- Python 之 【re模块的正则表达式学习】
摘要: re模块包括操作正则表达式的函数,一些工作中都需要用到,现在说明下使用方法. 使用说明: 一,re模块下的函数: 函数 描述 compile(pa ...
- python中的re模块和正则表达式基础
1.正则匹配基础知识 (1)通配符. .只匹配一个字符 >>> re.findall("p.ckname","piiickname-pockname&q ...
随机推荐
- dubbo+zookeeper示例记录
提示:要直接看搭建例子的可以跳到 三 一.项目架构的发展 传统的mvc架构项目将整个系统功能实现全部写在一个项目中,部署在一个机器上,随着用户量的增涨,单个项目服务器无法承受暴增的用户请求时需要增加服 ...
- 小程序 image跟view标签上下会有间隙
图片文字等inline元素默许是跟父级元素的baseline对齐,而baseline又和父级底边有必定间距 我是使用: 加上这个消除了间隙,如果没有解决,你可以分别用 vertical-align:t ...
- Entity Framework 一个表多个外键关联另外一张表的相同主键
一. 报错 异常:System.Data.Entity.Infrastructure.DbUpdateException: 更新条目时出错.有关详细信息,请参阅内部异常. ---> System ...
- BigDecimal 相关
一.BigDecimal 精度设置 BigDecimal setScale(int newScale, int roundingMode): newScale:小数位数, RoundingMode是一 ...
- RK3399 修改系统默认语言为简体中文
CPU:RK3288 系统:Android 7.1 修改系统默认语言为简体中文 diff --git a/build/target/product/full_base.mk b/build/targe ...
- qt 加载翻译文件 qm
QTranslator* myTranslator=new QTranslator; myTranslator->load("xxx.qm"); app.installTra ...
- Mac 中使用phpstorm 修改文件提示"only read",只读权限
在终端中执行命令: 给max系统用户liutao赋予整个项目文件权限,即可成功 sudo chown -R liutao /Users/liutao/Desktop/vagrant/newprojec ...
- JAVA SparkSQL初始和创建DataFrame的几种方式
建议参考SparkSQL官方文档:http://spark.apache.org/docs/latest/sql-programming-guide.html 一.前述 1.SparkSQ ...
- 富文本编辑器handyeditor,上传和预览图片的host地址不一样
使用富文本编辑器(官网)时,大多时候都会用到图片上传,但是下载的富文本编辑器的默认配置是只有一个上传地址的host的. var he = HE.getEditor('editor', { autoHe ...
- ISO/IEC 9899:2011 条款6.4.1——关键字
6.4.1 关键字 语法 1.以下为关键字: auto break case char const continue default do double ...