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 次

有无正则校验的区别

  1. # 纯python代码校验
  2. while True:
  3. phone_number = input('请输入你的手机号码>>>:').strip()
  4. if len(phone_number) == 11 \
  5. and phone_number.isdigit() \
  6. and(phone_number.startswith('13')) \
  7. or(phone_number.startswith('14')) \
  8. or(phone_number.startswith('15')) \
  9. or(phone_number.startswith('16')) \
  10. or(phone_number.startswith('17')) \
  11. or(phone_number.startswith('18')):
  12. print('手机号码格式正确')
  13. else:
  14. print('手机号码格式不正确')
  15. # 正则表达式校验
  16. import re
  17. phone_number = input('请输入你的手机号码>>>:').strip()
  18. if re.match('^(13|14|15|16|17|18)[0-9]{9}$',phone_number):
  19. print('手机号码格式正确')
  20. else:
  21. 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
  1. import re
  2. res = re.findall('a','apple apple apple') # 返回所有满足匹配条件的结果,放在列表里。
  3. print(res)
  1. # ['a', 'a', 'a']
  • search
  1. import re
  2. res = re.search('a','Apple apple apple') # 函数会在字符串中查找匹配,找到第一个匹配和返回一个包含匹配信息的对象。
  3. print(res)
  4. print(res.group()) # 如调用 group 可以取出返回的对象,如果返回的是None就会直接报错
  5. if res: # 当返回值为 None 时,就不会执行 group,不会报错
  6. print(ret.group())
  1. # <_sre.SRE_Match object; span=(5, 6), match='a'>
  2. # a
  • match
  1. import re
  2. res = re.match('a','apple apple apple')
  3. print(res)
  4. print(res.group())
  5. # match是从头开始匹配,如果正则规则从头开始可以匹配上,就返回一个对象,需要用group才能显示,如果没匹配上就返回None,调用group()就会报错
  1. # <_sre.SRE_Match object; span=(0, 1), match='a'>
  2. # a

其他方法

  • split
  1. import re
  2. res = re.split('[ab]','abcd') # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
  3. print(res)
  1. # ['', '', 'cd']
  • sub
  1. import re
  2. res = re.sub('\d','A','apple1apple2apple3') # 将字符串中的数字替换成'A'
  3. res1 = re.sub('\d','A','apple1apple2apple3',1) # 参数1表示替换1个
  4. print(res)
  5. print(res1)
  1. # appleAappleAappleA
  2. # appleAapple2apple3
  • subn
  1. import re
  2. res = re.subn('\d','A','apple1apple2apple3') # 将数字替换成'A'后,返回元组(替换结果,替换个数)
  3. print(res)
  1. # ('appleAappleAappleA', 3)
  • compile
  1. import re
  2. obj = re.compile('\d{3}') # 将正则表达式编译成一个正则表达式对象,规定要匹配的是3个数字
  3. res = obj.search('app111app') # 正则表达式对象调用 search,参数为待匹配的字符串
  4. print(res.group())
  1. # 111
  • finditer
  1. import re
  2. res = re.finditer('\d','1apple2apple3456') # finditer 返回一个存放匹配结果的迭代器
  3. print(res)
  4. print(next(res).group()) # 查看第一个结果
  5. print(next(res).group()) # 查看第二个结果
  6. print([i.group() for i in res]) # 查看剩余的结果
  1. # <callable_iterator object at 0x00000070AA9CC438>
  2. # 1
  3. # 2
  4. # ['3', '4', '5', '6']

re 模块与正则表达式的更多相关文章

  1. re模块(正则表达式)

    re 模块:正则表达式import re 内置模块: 1> re.match(pattern,string) pattern:就是正则表达式 string:被操作的对象 match,search ...

  2. python常用模块(1):collections模块和re模块(正则表达式详解)

    从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来 ...

  3. 20、collections模块和re模块(正则表达式详解)

    从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来 ...

  4. python模块部分 re模块 之正则表达式

    python 全栈开发 1.什么是模块 2.正则表达式 一.什么是模块? 1.模块: 是一组功能的集合 你要和一个东西打交道,但是这个东西本身和python没有关系,这个东西本身就存在, 这时,pyt ...

  5. Python的re模块,正则表达式书写方法

    Python的re模块,正则表达式 #导入re模块 import  re 1.match方法的使用: result = re.match(正则表达式,待匹配的字符串) 正则表达式写法: 第一部分: 字 ...

  6. Python的re模块,正则表达式用法详解,正则表达式中括号的用法

    Python的re模块,正则表达式 #导入re模块 import  re 1.match方法的使用: result = re.match(正则表达式,待匹配的字符串) 正则表达式写法: 第一部分: 字 ...

  7. re模块,正则表达式起别名和分组机制,collections模块,time与datetime模块,random模块

    re模块和正则表达式别名和分组机制 命名分组 (1)分组--可以让我们从文本内容中提取指定模式的部分内容,用()来表示要提取的分组,需要注意的是分组 是在整个文本符合指定的正则表达式前提下进行的进一步 ...

  8. Python 之 【re模块的正则表达式学习】

    摘要: re模块包括操作正则表达式的函数,一些工作中都需要用到,现在说明下使用方法. 使用说明: 一,re模块下的函数:            函数             描述 compile(pa ...

  9. python中的re模块和正则表达式基础

    1.正则匹配基础知识 (1)通配符. .只匹配一个字符 >>> re.findall("p.ckname","piiickname-pockname&q ...

随机推荐

  1. 快速打造自己的PHPStorm主题

    ---恢复内容开始--- 一个优雅和舒适的界面,可以增加过多写入代码的动力. Phpstorm小型的白色主题比较简陋.为了打造一个优雅和舒适的界面,我们安装一件叫Material Theme UI的插 ...

  2. Java 单例设计模式之 饿汉式和懒汉式

    public class InstanceSampleTest { public static void main(String[] args) { /** 单例设计模式的 饿汉式和懒汉式 * 单例模 ...

  3. Synchronized 原理

    1.同步代码块: 反编译结果: monitorenter : 每个对象有一个监视器锁(monitor).当monitor被占用时就会处于锁定状态,线程执行monitorenter指令时尝试获取moni ...

  4. Sentinel 快速入门

    Sentinel 简介 什么是 Sentinel? 『Sentinel』是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统负载保护等多 ...

  5. /bin/sh^M:bad interpreter: No such file or directory问题

    脚本命令正确无误,但是执行脚本的时候报错“/bin/sh^M:bad interpreter: No such file or directory” 原因:该脚本文件在windows系统中编辑过,引入 ...

  6. Docs-.NET-C#-指南-语言参考-预处理器指令:#error(C# 参考)

    ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#error(C# 参考) 1.返回顶部 1. #error(C# 参考) 2015/07/20 #error 可从代码中的特定 ...

  7. 数据库info.sql

    /* Navicat MySQL Data Transfer Source Server : loaderman Source Server Version : 50540 Source Host : ...

  8. nginx+lua 设置跨域

    nginx 配置: header_filter_by_lua_file cros.lua; access_by_lua ' if ngx.var.request_method == "OPT ...

  9. Qt自定义类重写 copy

    PtsData PtsData::copy(const PtsData &ptsData) { PtsData ptsData1; ptsData1.data_b = ptsData.data ...

  10. Block pool ID needed, but service not yet registered with NN java.lang.Exception: trace 异常解决

    以上为报错信息: 原因大概为:dd和nd关联的versionId不同导致, 解决方案,备份之前的current文件夹,让其自己生成新的.