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操作InfluxDB的一个Demo

    一.基础连接类 package com.test.repository.utils; import com.dcits.domain.entry.bo.common.InfluxDbRow; impo ...

  2. php配置出错,引发上传文件出错

    今天在做文件上传的时候,按正常逻辑提交,可提交到服务器后,$_FILES['tmp_name']死活不对,表单的enctype="multipart/form-data" 这个也加 ...

  3. Java初学者推荐学习书籍PDF免费下载

    场景 Effective Java 中文版Java核心技术 卷Ⅰ 基础知识(第8版)Java语言程序设计-进阶篇(原书第8版)疯狂Java讲义Java从入门到精通 第三版Java编程思想第4版重构-改 ...

  4. JavaScript中数组相关的属性方法

    下面的这些方法会改变调用它们的对象自身的值: Array.prototype.copyWithin() 在数组内部,将一段元素序列拷贝到另一段元素序列上,覆盖原有的值. Array.prototype ...

  5. iOS7的十个更“佳”:简洁直观更受青睐

    转自:http://www.25pp.com/news/news_27792.html iOS7自发布以来一直是褒贬不一,虽然苹果还只是发布了第二个测试版,但普通用户早已经在纠结到底该不该升级iOS7 ...

  6. leetcode 学习心得 (4)

    645. Set Mismatch The set S originally contains numbers from 1 to n. But unfortunately, due to the d ...

  7. 第一部分day03-元组、字典、字符串

    -----元组-----元组查询 a = (1,2,3,4) print(a[1:2]) #(2,) 购物车练习(列表方法练习) product_list=[ ['Mac',9000], ['kind ...

  8. 3. 上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? (提示:搜索一下Microsoft TFS、GitHub、Trac、Bugzilla、Rationale,Apple XCode),请用一个实际的源代码管理工具来建立源代码仓库,并签入/签出代码。

    上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? ---------------答题者:徐潇瑞 (1)Microsoft TFS的优缺点: 优点:是对敏捷,msf,c ...

  9. 201871010126 王亚涛 《面向对象程序设计(java)》 第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  10. 11-cmake语法-函数和宏的定义

    cmake语法不仅仅可以适用于 CMakeLists.txt,也适用于 xxx.cmake 文档. 在 OpenCV 的 CMakeLists.txt 中,很多 ocv_XXX() 的函数,都是定义在 ...