TOC

re模块

在python中,若想使用正则表达式,必须通过re模块来实现

import re

一、什么是正则表达式与re模块?

正则表达式是一门独立的技术, 任何语言都可以使用正则表达式,

正则表达式是由一堆特殊的字符组合而来的。

1.1 字符组

  • 字符组:

    • [0-9] 可以匹配到一个0-9的字符
    • [9-0]: 报错, 必须从小到大
    • [a-z]: 从小写的a-z
    • [A-Z]: 从大写A-Z
    • [z-A]: 错误, 只能从小到大,根据ascii表来匹配大小。
    • [A-z]: 总大写的A到小写的z。

    注意: 顺序必须要按照ASCII码数值的顺序编写。

1.2 元字符

1.2.1 单个使用

1.2.2 组合使用

  • 组合使用

    • \w\W: 匹配字母数字下划线与非字母数字下划线,匹配所有。
    • \d\D: 无论是数字或者非数字都可以匹配。
    • \t: table
    • \n: 换行
    • \b: 匹配单词结尾,tank jasonk
    • ^: startswith
      • '^'在外面使用: 表示开头。
      • [^]: 表示取反的意思。
    • $: endswith
    • ^$: 配合使用叫做精准匹配,如何限制一个字符串的长度或者内容。
    • |: 或。ab|abc如果第一个条件成立,则abc不会执行,怎么解决,针对这种情况把长的写在前面就好了,一定要将长的放在前面。
    • [^...]: 表示取反的意思。
    • [^ab]: 代表只去ab以外的字符。
    • [^a-z]: 取a-z以外的字符。

二、为什么要使用正则

比如要获取“一堆字符串”中的“某些字符”,

正则表达式可以帮我们过滤,并提取出想要的字符数据。

  • 比如过滤并获取 “tank”
'wafawrjkwagfiu21knriut8ankjfdgau0q92ru20yrisana tank wyqfwqrqyr9q 9'
```python
import re
str1 = 'wafawrjkwagfiu21knriut8ankjfdgau0q92ru20yrisana tank wyqfwqrqyr9q 9'
res = re.findall('tank', str1)
print(res)
  • 应用场景:

    • 爬虫: re, BeautifulSoup4, Xpath, selector
    • 数据分析过滤数据: re, pandas, numpy...
    • 用户名与密码、手机认证:检测输入内容的合法性
    • 过滤关键字

三、如何使用

3.1 re模块的三种比较重要的方法

3.1.1 findall()

可以匹配 "所有字符" ,拿到返回的结果,返回的结果是一个列表。

import re
str1 = 'sean tank json'
# findall
res = re.findall('[a-z]{4}', str1)
print(res)

3.1.2 search()

在匹配一个字符成功后,拿到结果后结束,不往后匹配。

import re
str1 = 'sean tank json'
# search
res = re.search('[a-z]{4}', str1)
print(res) # 返回的是一个对象
print(res.group()) # 从对象中取值 <re.Match object; span=(0, 4), match='sean'>
sean

3.1.3 match()

从匹配字符的开头匹配,若开头不是想要的内容,则返回None。

import re
str1 = 'sean tank json'
# match
res = re.match('sean', str1)
print(res)
print(res.group()) <re.Match object; span=(0, 4), match='sean'>
sean # 如果没有匹配到则会返回None,然后打印的时候会出错
None
Traceback (most recent call last):
File "G:/python项目/day17/re模块.py", line 11, in <module>
print(res.group())
AttributeError: 'NoneType' object has no attribute 'group'
# 因此我们可以加一个if判断句,可以避免上面的问题
import re
str1 = 'sean tank json'
# match
res = re.match('12', str1)
print(res) if res:
print(res.group())

四、示例

4.1 检测手机号码的合法性

# 纯python校验
while True:
phone_number = input('请输入手机号码:').strip()
# not > and > or
if len(phone_number) == 11 and (phone_number.startswith(
'13'
) or phone_number.startswith(
'14'
) or phone_number.startswith(
'15'
) or phone_number.startswith(
'19'
)):
print('手机号码合法!')
break else:
print('手机号码不合法!') # re校验
import re
while True:
phone_number = input('手机号:')
if re.match('^(13|14|15|19)[0-9]{9}', phone_number):
print('合法')
break
else:
print('不合法')

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

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

    本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 正则表达式(Regluar Expressions)又称规则 ...

  2. 【转】Python之正则表达式(re模块)

    [转]Python之正则表达式(re模块) 本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 参考文档 提示: ...

  3. 【Python爬虫】正则表达式与re模块

    正则表达式与re模块 阅读目录 在线正则表达式测试 常见匹配模式 re.match re.search re.findall re.compile 实战练习 在线正则表达式测试 http://tool ...

  4. Python与正则表达式[0] -> re 模块的正则表达式匹配

    正则表达式 / Regular Expression 目录 正则表达式模式 re 模块简介 使用正则表达式进行匹配 正则表达式RE(Regular Expression, Regexp, Regex) ...

  5. python 正则表达式re使用模块(match()、search()和compile())

    摘录 python核心编程 python的re模块允许多线程共享一个已编译的正则表达式对象,也支持命名子组.下表是常见的正则表达式属性: 函数/方法 描述 仅仅是re模块函数 compile(patt ...

  6. python学习笔记(十)——正则表达式和re模块

    #正则表达式和re模块 # match(pattern, string,[flag]) #在字符串开始时进行匹配 # pattern 正则表达式 # string 要匹配的字符串 # [flag] 可 ...

  7. python正则表达式之re模块方法介绍

    python正则表达式之re模块其他方法 1:search(pattern,string,flags=0) 在一个字符串中查找匹配 2:findall(pattern,string,flags=0) ...

  8. python中的正则表达式(re模块)

    一.简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎 ...

  9. pytho day6 <正则表达式、常用模块、反射>

    本节介绍: 一:正则表达式: 正则表达并不是python 独有的.在各个语言里都有该语法的介绍.正则表达是处理字符串的强大的处理工具.拥有自己的独特的 处理方法.和处理引擎.虽然性能没有python ...

随机推荐

  1. Java 实现生产者 – 消费者模型

    转自:http://www.importnew.com/27063.html 考查Java的并发编程时,手写“生产者-消费者模型”是一个经典问题.有如下几个考点: 对Java并发模型的理解 对Java ...

  2. Java中的集合类(List,Set.Map)

    1.List 1.1 Arraylist 与 LinkedList 区别 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全: 底层数据结构: Arr ...

  3. 斐波那契查找(Fibonacci Search)

    斐波那契查找 斐波那契查找就是在二分查找的基础上根据斐波那契数列进行分割的.   在斐波那契数列找一个等于略大于查找表中元素个数的数F[n],将原查找表扩展为长度为F[n](如果要补充元素,则补充重复 ...

  4. Delphi编译/链接过程

    下面展示了Delphi是怎样编译源文件,并且把它们链接起来,最终形成可执行文件. 当Delphi编译项目(Project)时,将编译项目源文件.窗体单元和其他相关单元,在这个过程中将会发生好几件事情: ...

  5. bugku——宽带信息泄露(RouterPassView 查看路由器配置信息)

    题目地址:http://ctf.bugku.com/files/5986768ca8b96cead45aec16a88431b5/conf.bin 下载之后发现是个后缀名为bin的二进制文件,其实这个 ...

  6. windows设置多个JDK环境

    1.查看jdk版本 java -version 2.查看JAVA_HOME和PATH的变量值 echo %JAVA_HOME% set path 3.临时修改环境变量JAVA_HOME和PATH的变量 ...

  7. nginx上部署PHP

    环境:centos7  nginx1.16.1 (1)先将tp源代码下载到nginx的站点目录下 注意:存放tp的目录要有可执行权限,否则无法进入目录,访问报403 (2)servr配置: serve ...

  8. msyql error: Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A

    mysql> use mydb Reading table information for completion of table and column names You can turn o ...

  9. 用js怎么来判断我已点击了窗体中“关闭”按钮?

    onbeforeunload 事件在即将离开当前页面(刷新或关闭)时触发. 该事件可用于弹出对话框,提示用户是继续浏览页面还是离开当前页面. 对话框默认的提示信息根据不同的浏览器有所不同,标准的信息类 ...

  10. [KCOJ20170214]又一个背包

    题目描述 Description 小W要去军训了!由于军训基地是封闭的,小W在军训期间将无法离开军训基地.所以他没有办法出去买他最爱吃的零食.万般无奈的小W只好事先买好他爱吃的零食,装在背包里带入军训 ...