python学习笔记 正则表达式 详解

  1. 行定位符
    行定位符就是用来描述子串的边界。“^”表示行的开始;“$”表示行的结尾
    ^tm:匹配以子串tm的开始位置是行头
  2. 元字符

常用元字符

例子:\bmr\w*\b
匹配以字母mr开头的单词,先是从某个单词开始处(\b),然后匹配字母mr,接着是任何数量的字母或数字(\w*),最后是单词结束处(\b)。
可以匹配:mrsoft,mebook,mr123

3.限定符:
(\w*)可以匹配任何数量的字母或数字,那么怎么匹配特定数量的数字呢?
例子:匹配8位QQ号
^\d{8}$

4.字符类

匹配元音:[aeiou]
匹配标点符号:[.!?]
匹配一位数字:\d或[0-9]
匹配:\w或[a-z0-9A-W]
匹配"Python" 或 “python”:[Pp]ython
匹配 “ruby” 或 “rube”:rub[ye]
匹配任何数字。类似于[0123456789]:[0-9]
[^aeiou] 除了aeiou字母以外的所有字符
[^0-9] 匹配除了数字外的字符

5.排除字符^

[^a-zA-Z]:排除英文字母

6.选择字符
例子:匹配身份证号
两种情况,15位时都是数字,18位时前17位是数字,最后一位为校验码
分析例子:包含条件选择的逻辑,用(|)来实现,相当于 或。

(^\d{15}$)|(^\d{18}$)|(^\d{17})(\d|X|x)$

7.转义字符串
例子:匹配ip地址127.0.0.1
分析例子:转义字符(\),是将特殊字符转变为普通字符
错误方法:

[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}

正确方法:

[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

8.分组
小括号字符的第一个作用就是通过改变限定符的作用范围,如 | ^ * 等
(six|four)th:匹配单词sixth或者fourth,如果不用括号就变成了匹配six或fourth
小括号的第二个作用是分组,也就是子表达式。如(.[0-9]{0,3}{3}
例子:匹配邮箱

import re
ret = re.match("\w{4,20}@163\.com", "sandraa@163.com")
print(ret.group())
ret = re.match("\w{4,20}@(163|126|qq)\.com", "sandraa@126.com")
print(ret.group())
ret = re.match("\w{4,20}@(163|126|qq)\.com", "sandraa@qq.com")
print(ret.group())sandraa@163.com
sandraa@126.com
sandraa@qq.com

re模块实现正则表达式操作

一、
1.match()

match() 此方法用于从字符串的开始处进行匹配,如果在起始位置匹配成功,则返回Match对象,否则返回None

re.match(pattern,string,[flags])
pattern:表示模式字符串,由要匹配的正则表达式转换而来
string:表示要匹配的字符串
flags:可选参数,表示标志位,用于控制匹配方式

import re
pattern = r'mr_\w+'
word = 'MR_SHOP mr_shop'
match = re.match(pattern,word,re.I)
print(match)
<re.Match object; span=(0, 7), match='MR_SHOP'>
import re
pattern = r'mr_\w+'
word = 'MR_SHOP mr_shop'
match = re.match(pattern,word,re.I)
print('匹配值的起始位置:',match.start())
print('匹配值的结束位置:',match.end())
print('匹配位置的元组:',match.span())
print('要匹配的字符串:',word)
print('匹配数据:',match.group())
匹配值的起始位置: 0
匹配值的结束位置: 7
匹配位置的元组: (0, 7)
要匹配的字符串: MR_SHOP mr_shop
匹配数据: MR_SHOP

2.search()

此方法用于在整个字符串中搜索第一个匹配的值,如果匹配成功,则返回Match对象,否则返回None

re.search(pattern,string,[flags])

import re
pattern = r'mr_\w+'
word = 'MR_SHOP mr_shop'
match = re.search(pattern,word,re.I)
print(match)
<re.Match object; span=(0, 7), match='MR_SHOP'>

3.findall()

此方法用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回。如果匹配成功,则返回匹配结构的列表,否则返回空列表。

re.findall(pattern,string,[flags])

import re
pattern = r'mr_\w+'
word = 'MR_SHOP mr_shop'
match = re.findall(pattern,word,re.I)
print(match)
['MR_SHOP', 'mr_shop']

二、
1.替换字符串
re.sub(pattern,repl,string,count,flags)
repl:表示替换的字符串
string:表示要被查找替换的原始字符串
count:表示模式匹配后替换的最大次数,默认值为0,表示替换所有的匹配
flags:可选参数,表示标志位,用于控制匹配方式

例题:隐藏中奖信息中的手机号码

import re
pattern = r'1[34578]\d{9}'
msg = '中奖号码为:8834572 联系电话为:17301648677'
result = re.sub(pattern, '1XXXXXXXXXX', msg)
print(result)
中奖号码为:8834572 联系电话为:1XXXXXXXXXX

2.分割字符串
split()方法用于实现格局正则表达式分割字符串,并以列表的形式返回,其作用与字符串对象的split()类似,不同的是分割字符由模式字符串指定
语法:

re.split(pattern,string,[maxsplit],[flags])

maxsplit:可选参数,表示最大的拆分次数
例子:从给定的URL地址中提取出请求地址和各个参数


import re
pattern = r'[?|&|=|:]'
url = '<script type="application/json" id="user-data" data-for="result-data">{"user":null,"username":"","isLogin":0,"userPortrait":""}</script>'
result = re.split(pattern,url)
print(result)
['<script type', '"application/json" id', '"user-data" data-for', '"result-data">{"user"', 'null,"username"', '"","isLogin"', '0,"userPortrait"', '""}</script>']

python学习笔记 正则表达式 详解2相关推荐

  1. python流程控制语句-python学习 流程控制语句详解

    ###################### 分支语句 python3.5 ################ #代码的缩进格式很重要 建议4个空格来控制 #根据逻辑值(True,Flase)判断程序的 ...

  2. IOS开发学习笔记-----UILabel 详解

    IOS开发学习笔记-----UILabel 详解 01 //创建uilabel 02 UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMa ...

  3. wringPi 初始化GPIO 为上拉_敏矽微电子Cortex-M0学习笔记04-GPIO详解及应用实例

    前面我们已经对敏矽微电子的基于cortex m0内核的ME32F030R8T6的基本功能做了介绍,然后详细讲解了开发环境MDK的安装,pack包的安装,工程的建立及程序的仿真,紧接着讲解了ME32F0 ...

  4. 关于ClassLoader的学习笔记,详解版

    ClassLoader 详解 ClassLoader 做什么的? 延迟加载 各司其职 ClassLoader 传递性 双亲委派 Class.forName 自定义加载器 Class.forName v ...

  5. DNS 学习笔记之三- 详解DNS的资源记录

    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />       最 ...

  6. JavaWeb学习笔记——JSON详解

    本文是学习Java时所记录的学习笔记,本节记录了JSON的相关知识,需要掌握JSON的书写格式,懂得JSON与String类型的转换. 文章目录 JSON简介 什么是JSON? JSON语法规则 JS ...

  7. python中的正则表达式详解

    一.正则表达式是什么? (急于用正则表达式的朋友可以直接跳过这个部分) ------------------------ 正则表达式(regular expression)描述了一种字符串匹配的模式( ...

  8. Python全栈开发-Python爬虫-03 正则表达式详解

    正则表达式 一. 什么是正则表达式 正则表达式,又称规则表达式,通常被用来检索.替换那些符合某个模式(规则)的文本. 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定 ...

  9. ctfhub技能书+历年真题学习笔记(详解)

    Web Web前置技能 HTTP协议 请求方式 题目:HTTP Method is GET Use CTF**B Method, I will give you flag. Hint: If you ...

最新文章

  1. ajax 请求_前端后分离Ajax跨域请求保证Session一致
  2. springboot2新版springcloud微服务,带你了解不一样的springboot2
  3. 运行Qt release版本时出现“丢失QtCore4.dll”错误
  4. 【MM模块】Material Planning - 物料计划
  5. 关于 mysql 在联合查询时,使用 concat 拼接查询条件
  6. [转]Spring SpringMVC SpringBoot SpringCloud概念、关系及区别
  7. 大学计算机基础试题 选择题,大学计算机基础试题选择题
  8. 我扒了 6730 个微信用户数据,得出了这些结论......
  9. Oracle 禁止操作系统认证登录
  10. JavaScript中的数据类型及数据类型转换(附实例)
  11. 国网天津电缆公司带电检测典型案例分析
  12. WordPress导航主题/酷啦鱼导航主题模板
  13. java相对路径保存文件夹_java项目路径 文件路径 相对路径 整理
  14. 如何double你的能力
  15. 通过JAVA编写DOMINO服务器端插件程序
  16. librosa@soundFile音频读取和绘图@声道@通道@包络
  17. python datetime 时间加一秒,一分钟
  18. Opencv图像分割与Watershed算法
  19. Java编程题小练习(初级):输入10个整数并进行排序输出。
  20. 5个开源且简单实用的Code Review工具

热门文章

  1. web3js脚本编写
  2. 第四十五篇 信号上升时间的理解
  3. 【调剂】华南农业大学电子工程学院(人工智能学院)岳学军教授接收调剂研究生...
  4. 【内置渲染管线】Unity标准Shader解析(渲染模式,贴图类型)
  5. 概率论之先验概率和后验概率
  6. arcgis使用js动态加载坐标
  7. css省略号...的实现
  8. 【人工智能项目】卷积神经网络图片分类框架
  9. 【参赛作品32】openGauss2.1.0新特性-账本数据库
  10. Spring-security-oauth2讲解