正则表达式

内容概要


  • 正则表达式前戏
  • 正则表达式之字符组
  • 正则表达式特殊符号
  • 正则表达式量词
  • 正则表达式贪婪与非贪婪匹配
  • 正则表达式取消转义
  • python内置模块之re模块

内容详情


正则表达式前戏

# 京东注册页面获取手机号
有很多校验规则
必须是11位的纯数字 并且必须是常规的手机号开头(13,15,17,18,19)
# 上述的规则能否使用python代码实现
'''python实现手机校验功能'''
1.获取用户的手机号
phone_num = input('请输入您的手机号>>>:').strip()
2.先校验是否是11位
if len(phone_num) == 11:
3.再校验是否是纯数字
if phone_num.isdigit():
4.校验开头是否合法(随便写几个意思一下)
if phone_num.startswith('13') or phone_num.startswith('15') or phone_num.startswith('17') or phone_num.startswith('18'):
print('是一个正常的手机号')
else:
print('手机号开头不合法')
else:
print('手机号必须是纯数字')
else:
print('手机号必须是11位') # 使用正则表达式
'''正则表达式实现手机校验功能'''
import re
phone_number = input('please input your phone number : ').strip()
if re.match('^(13|14|15|18)[0-9]{9}$', phone_number):
print('是合法的手机号码')
else:
print('不是合法的手机号码')
"""
正则表达式是一门独立的语言 专门用来匹配、校验、筛查所需的数据
任何编程语言都可以使用 在python中如果想用就必须借助于内置模块re
""" # 用自己的话概括>>>:什么是正则表达式
利用一些'特殊符号'的组合去字符串中筛选出想要的数据
所以学习正则很大程度上就是在学习一些特殊符号的使用
'''在匹配筛选查找数据的时候可以使用正则提供的符号也可以直接写目标数据'''

正则表达式之字符组

# 在线测试网站:http://tool.chinaz.com/regex/
'''单个字符组默认一次只匹配一个字符'''
[0123456789] 匹配0到9之间的任意一个数字
[0-9](简写) 匹配0到9之间的任意一个数字
[a-z] 匹配a到z之间的任意一个小写字母
[A-Z] 匹配A到Z之间的任意一个大写字母
[0-9a-zA-Z] 匹配任意一个数字或者大小写字母(没有顺序)

正则表达式特殊符号

# 特殊符号默认也是一次匹配一个字符
. 匹配除换行符以外的任意字符
\w 匹配数字、字母、下划线(后续筛选变量名可能用到)
\d 匹配任意的数字
\t 匹配一个制表符(tab键)
^ 匹配字符串的开始 eg:^9 找9并且这个9必须在开头
$ 匹配字符串的结尾 eg:9$ 找9并且这个9必须在末尾
\W 匹配非字母或数字或下划线
\D 匹配非数字
a|b 匹配a或者b 管道符就是or(或)的意思
() 给正则表达式分组 不影响正则匹配(后续再讲)
[] 字符组的概念(里面所有的数据都是或的关系)
[^] 上箭号出现在了中括号的里面意思是取反操作

正则表达式量词

# 量词必须跟在表达式的后面 不能单独使用 目的是增加匹配的字符数
'''注意量词默认都是贪婪匹配(尽可能多的匹配)'''
* 重复零次或者多次(默认就是多次:越多越好)
+ 重复一次或者多次(默认就是多次:越多越好)
? 重复零次或者一次(默认就是一次:越多越好)
{n} 重复n次
{n,} 重复最少n次最多多次(越多越好)
{n,m} 重复n到m次(越多越好)

正则表达式贪婪与非贪婪匹配

# 正则    # 待匹配的文本    # 结果
<.*> <script>alert(123)<script> 1条 贪婪匹配
以最后一个大括号的出现作为结束标志
<.*?> <script>alert(123)<script> 2条 非贪婪匹配
以第一个大括号的出现作为结束标志 量词默认都是贪婪匹配 如果想修改为非贪婪匹配 只需要在量词的后面加?即可
贪婪非贪婪通常都是利用左右两边的条件作为筛选依

正则表达式取消转义

\n       \n     False
\\n \n True
\\\\n \\n True
在python中还可以在字符串的前面加r取消转义 更加方便

python内置模块之re模块

# 在python中无法直接使用正则 需要借助于模块
1.内置的re模块
2.第三方的其他模块 import re res = re.findall('a', 'jason oscar aaa') # findall(正则表达式,待匹配的文本)
print(res) # ['a', 'a', 'a', 'a', 'a'] # 结果是所有符合条件的数据 并且组织成了列表 res1 = re.search('a', 'jason oscar aaa') # search(正则表达式,待匹配的文本)
print(res1) # 查找到一个符合条件的数据就结束 没有则返回None
print(res1.group()) # a 没有则无法调用group() 直接报错 res2 = re.match('j', 'jason oscar aaa') # match(正则表达式,待匹配的文本)
print(res2) # None 从字符串的开头匹配 如果没有则直接返回None 类似于给正则自动加了^ 如果符合也只获取一个就结束
print(res2.group()) # j 没有则无法调用group() 直接报错 res3 = re.finditer('a', 'jason oscar aaa') # finditer(正则表达式,待匹配的文本)
print(res3) # 结果是一个迭代器对象 为了节省空间
print([obj.group() for obj in res3]) # ['a', 'a', 'a', 'a', 'a'] obj = re.compile('\d+') # 提前写好后续需要经常使用的正则
print(re.findall(obj,'asjd21hj13123j')) # 写一遍之后 直接反复调用即可
print(re.findall(obj,'234328748hgjghj')) # 写一遍之后 直接反复调用即可
print(re.findall(obj,'jhjhjh423432423')) # 写一遍之后 直接反复调用即可

模块re正则的更多相关文章

  1. python——re模块(正则表达)

    python——re模块(正则表达) 两个比较不错的正则帖子: http://blog.csdn.net/riba2534/article/details/54288552 http://blog.c ...

  2. 常用的re模块的正则匹配的表达式

    07.01自我总结 常用的re模块的正则匹配的表达式 一.校验数字的表达式 1.数字 ^[0-9]\*$ 2.n位的数字 ^\d{n}$ 3.至少n位的数字 ^\d{n,}$ 4.m-n位的数字 ^\ ...

  3. re模块和正则

    正则表达式:就是用来筛选字符串中特定内容的一串具有某种逻辑规则的字符组成.正则表达式不是Python独有的,而是一门独立的技术,它在所有的编程语言中都有使用,在Python中使用就必须依赖于re模块. ...

  4. 模块 re_正则

    模块re_正则 讲正题之前我们先来看一个例子:https://reg.jd.com/reg/person?ReturnUrl=https%3A//www.jd.com/ 这是京东的注册页面,打开页面我 ...

  5. python--------------常用模块之正则

    一.认识模块  什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是加上.py的后缀,但其实import加载的模块分为四个通用类别 : 1.使用python编写的代码(.py文件 ...

  6. 爬虫模块介绍--Beautifulsoup (解析库模块,正则)

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时 ...

  7. python常用模块之re模块(正则)

    python种的re模块常用的5种方法,分别是re.match   re.search  re.findall  re.split  re.sub. 在介绍五种方法之前,需要介绍一下正则的基础. . ...

  8. python全栈开发从入门到放弃之常用模块和正则

    什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码(.p ...

  9. python模块之正则

    re模块 可以读懂你写的正则表达式 根据你写的表达式去执行任务 用re去操作正则 正则表达式 使用一些规则来检测一些字符串是否符合个人要求,从一段字符串中找到符合要求的内容.在线测试网站:http:/ ...

  10. Python模块(三)(正则,re,模块与包)

    1. 正则表达式 匹配字符串 元字符 .   除了换行 \w  数字, 字母, 下划线 \d  数字 \s  空白符 \n 换行符 \t  制表符 \b  单词的边界 \W  \D \S 非xxx [ ...

随机推荐

  1. Oracle中between 和 in

    select * from test_s where id between 2 and 12; between 就是左右全闭区间. SELECT columnsFROM tablesWHERE col ...

  2. JavaFX入门及相关问题

    下个星期是我们专业的课程设计专周,主要是做一个Java的桌面应用程序,老师上课讲的是用Swing来开发图形化界面,但是听朋友说到一个可视化的图形界面工具JavaFX,本 人愚笨,弄了一天才大致调试完成 ...

  3. LC-349

    Given two integer arrays nums1 and nums2, return an array of their intersection. Each element in the ...

  4. YOLO系列梳理(一)YOLOv1-YOLOv3

    ​ 前言 本文是YOLO系列专栏的第一篇,该专栏将会介绍YOLO系列文章的算法原理.代码解析.模型部署等一系列内容.本文系公众号读者投稿,欢迎想写任何系列文章的读者给我们投稿,共同打造一个计算机视觉技 ...

  5. 定时执行任务-springboot

    定时执行任务-springboot 先看两个接口 这两个接口springboot已经帮我们封装好了,我们不需要去手动使用 TaskScheduler //任务调度者 TaskExecutor //任务 ...

  6. 机器学习基础:奇异值分解(SVD)

    SVD 原理 奇异值分解(Singular Value Decomposition)是线性代数中一种重要的矩阵分解,也是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐 ...

  7. 手把手带你入门ECharts

    1.什么是ECharts ECharts,缩写来自Enterprise Charts,商业级数据图表,是来自百度商业前端数据可视化团队EFE的一个开源的纯Javascript的图表库,可以流畅的运行在 ...

  8. 代码管理工具-Git基础介绍及常用技巧

    目录 Git起源 基本概念 Branch.HEAD和Commit tree Git分支 git merge 和 git rebase 的区别和抉择 与远程仓库的交互 关于一些实际开发场景的问题和解决方 ...

  9. 【ConcurrentHashMap】浅析ConcurrentHashMap的构造方法及put方法(JDK1.7)

    目录 引言 代码讲解 构造方法 put方法 ensureSegment Segment.put 引言 ConcurrentHashMap的数据结构如下. 和HashMap的最大区别在于多了一层Segm ...

  10. 经典!服务端 TCP 连接的 TIME_WAIT 过多问题的分析与解决

    开源Linux 专注分享开源技术知识 本文给出一个 TIME_WAIT 状态的 TCP 连接过多的问题的解决思路,非常典型,大家可以好好看看,以后遇到这个问题就不会束手无策了. 问题描述 模拟高并发的 ...