当前位置: 首页 > article >正文

Python工程语法(正则表达式)

正则表达式是一个特殊的字符序列,方便的检查一个字符串是否与某种模式匹配。re模块使Python拥有正则表达式功能。

1. 字符匹配

正则表达式在网络爬虫、数据分析中有着广泛使用,掌握正则表达式能够达到事半功倍的效果。

1.1 方法和功能

方法功能
match()判断一个正则表达式是否从开始处匹配一个字符串
search()遍历字符串,找到正则表达式匹配的第一个位置,返回匹配对象
findall()遍历字符串,找到正则表达式匹配的所有位置,并以列表的形式返回。如果给出的正则表达式中包含子组,就会把子组的内容单独返回,如果有多个子组就会以元组的形式返回。
finditer()遍历字符串,找到正则表达式匹配的所有位置,并以迭代器的形式返回

findall( , )

findall([ ],)

findall([^ ], ) 来找除了[]里面的字符

[a-z]匹配a~z的任意字符([0-9]也可以)

.匹配除了换行符以外的任意字符

贪婪匹配,匹配符合条件的最长的字符串

".? 字符串 " ,用来确定匹配的字符串前面有一个或者没有字符都符合要求

1.2 特殊字符

特殊字符含义
\d匹配任何十进制数字;相当于类 [0-9]
\D与 \d 相反,匹配任何非十进制数字的字符;相当于类 0-9
\s匹配任何空白字符(包含空格、换行符、制表符等);相当于类 [ \t\n\r\f\v]
\S与 \s 相反,匹配任何非空白字符;相当于类 \t\n\r\f\v
\w匹配任意一个文字字符,包括大小写字母、数字、下划线,等价于表达式[a-zA-Z0-9_]
\W于 \w 相反 (注:re.ASCII 标志使得 \w 只能匹配 ASCII 字符)
\b匹配单词的开始或结束
\B与 \b 相反

\w 匹配字母数字下划线(汉字)

\d匹配数字

\s匹配任意空白符 包括空格,制表符等等

2. 数量控制

控制匹配规则的重复次数~

2.1 *重复0次或多次

2.2 +重复1次或多次

2.3 ?重复1次或0次

2.4 {n}重复n次

2.5 {n,}重复n次或多次

2.6 {n,m}重复n到m次

3. 分组

()提取兴趣区域

(|)提取兴趣区域(| = or)

解释:

(?:主角团的|爱吃小面包的):这是一个非捕获组,匹配“主角团的”或“爱吃小面包的”,但不会捕获这些前缀。

([\u4e00-\u9fa5a-zA-Z·]+):这是一个捕获组,匹配一个或多个汉字、字母或特殊字符(如·),用于提取名字部分。

4. 开始和结束

^开始

$结尾

5. 特殊字符

由于正则表达式中* . \ {} () 等等符号具有特殊含义,如果你指定的字符正好就是这些符号,需要用\进行转义

6. 常用方法

6.1 re.findall

获取匹配到的所有数据

6.2 re.match

从字符串的起始位置匹配,成功返回一个对象否则返回none。

匹配成功返回对象,对象的方法:

方法功能
group()返回匹配的字符串
start()返回匹配的开始位置
end()返回匹配的结束位置
span()返回一个元组表示匹配位置(开始,结束)

6.3 re.search

扫描整个字符串并返回第一个成功匹配的字符串。成功返回一个对象否则返回none

6.4 re.sub

替换匹配成功的字符

类似与字符串的replace函数

6.5 re.split

根据匹配成功的位置对字符串进行分割

6.6 re.finditer

类似findall 但是不会全部返回出来 而是返回迭代器(比如匹配成功了10万个 全部返回就很吃内存了)

import re
​
text = "python is   very easy"
data = re.findall(r"\w+", text)
print(data)  # ['python', 'is', 'very', 'easy']

7. 常见正则

QQ号:[1 - 9][0 - 9]{4, }(腾讯QQ号从10000开始)
帐号(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
身份证号(15位、18位数字):^\d{15}|\d{18}$
短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$

http://www.kler.cn/a/611347.html

相关文章:

  • MOSN(Modular Open Smart Network)-05-MOSN 平滑升级原理解析
  • Spring Boot框架识别
  • 【C语言】文件操作(详解)
  • C#上位机通过NetToPLCsim与西门子PLC仿真连接通信
  • Spring Boot 自动装配原理深度解析:从源码到实战
  • Ubuntu 优化启动时间优化
  • GraalVM 和 传统 JVM(HotSpot/JDK) 的详细对比,涵盖执行模式、性能、生态、适用场景等方面,并附上总结和选择建议
  • Java多线程与高并发专题——CountDownLatch 是如何安排线程执行顺序的?
  • leetcode11.盛水最多的容器
  • FFmpeg开发学习:AVFormatContext结构体
  • 小程序内表格合并功能实现—行合并
  • Spring MVC:关于@PostMapping和@GetMapping的使用场景、区别及核心要点的总结
  • javaweb后端登录功能cookie session
  • CVE-2020-0796:永恒之黑实战学习
  • 鸿蒙-全屏播放页面(使用相对布局)---持续更新中
  • 爬虫:Requests-HTML的详细使用
  • SiLU与GeLU激活函数:现代大模型的选择
  • Selenium 简单入门操作示例
  • MySQL基础知识与函数
  • (UI自动化测试web端)第二篇:元素定位的方法_css定位之层级选择器