十分钟python入门 正则表达式

正则常见的三种功能,它们分别是:校验数据的有效性、查找符合要求的文本以及对文本进行切割和替换等操作。

1.元字符

所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符

元字符大致分成这几类:表示单个特殊字符的,表示空白符的,表示某个范围的,表示次数的量词,另外还有表示断言的

1.1特殊单字符

英文的点(.)表示换行以外的任意单个字符,\d 表示任意单个数字,\w 表示任意单个数字或字母或下划线,\s 表示任意单个空白符。另外,还有与之对应的三个 \D、\W 和 \S,分别表示着和原来相反的意思

复制代码
import re

#匹配所有数字

txt = "123d5sdf23"
result = re.findall('\d', txt)
print(result)
#输出:['1', '2', '3', '5', '2', '3']

#匹配所有的数字、字母和下划线

txt = 'sdfw234_sdf12'
result = re.findall('\w', txt)
print(result)
#输出:['s', 'd', 'f', 'w', '2', '3', '4', '_', 's', 'd', 'f', '1', '2']

1.2. 空白符

不同的系统在每行文本结束位置默认的"换行"会有区别。比如在 Windows 里是 \r\n,在 Linux 和 MacOS 中是 \n

\r 回车符

\n 换行符

\f 换页符

\t 制表符

\v 垂直制表符

\s 任意空白字符

复制代码
#获取每一行的开头
f = open('hello.txt', 'r', encoding='utf-8')
txt = f.read()
print(txt)
#输出:
#小明
#小红
#小月
result = re.findall('\n\w*', txt)
print(result)
#输入:['\n小红', '\n小月']

1.3. 量词

在正则中,英文的星号(*)代表出现 0 到多次,加号(+)代表 1 到多次,问号(?)代表 0 到 1 次,{m,n}代表 m 到 n 次

* :0到多次

  • :1到多次

?:0到1次

{m}:出现m次

{m,} :出现至少m次

{m,n} :m到n次

复制代码
#寻找3个数字组合
txt = '123 1 sfd 2342 aa 23g 342'
result = re.findall('\d{3}\s', txt)
print(result)
#输出:['123 ', '342 ']

4. 范围

| :或,如ab|bc 代表ab或者bc

...\] :多选一,括号中任意单个元素 \[a-z\]:匹配a-z之间任意单个元素 \[\^...\] :取反,不能包括括号中的任意单个元素 #某个资源可能以 http:// 开头,或者 https:// 开头,也可能以 ftp:// 开头 txt = 'http://www.baidu.com' result = re.match('(https?|ftp):\/\/', txt) print(result.span()) #输出:(0, 7) ## 2.量词与贪婪 ### 2.1 贪婪模式 在正则中,表示次数的量词默认是贪婪的,在贪婪模式下,会尝试尽可能最大长度去匹配 #贪婪匹配 txt = 'aaabb' result = re.findall(r'a*', txt) print(result) #输出:['aaa', '', '', ''] a\* 在匹配开头的 a 时,会尝试尽量匹配更多的 a,直到第一个字母 b 不满足要求为止,匹配上三个 a,后面每次匹配时都得到了空字符串。 贪婪模式的特点就是尽可能进行最大长度匹配。 ### 2.2 非贪婪模式 量词后面加上英文的问号 (?),正则就变成了 a\*?,这就是非贪婪模式 #非贪婪匹配 txt = 'aaabb' result = re.findall(r'a*?', txt) print(result) #输出:['', 'a', '', 'a', '', 'a', '', '', ''] 非贪婪模式会尽可能短地去匹配 ## 3.函数 ### 3.1findall() 函数 `findall()` 函数返回包含所有匹配项的列表。 #findall() 这个列表以被找到的顺序包含匹配项 txt = "China is a great country" x = re.findall("China", txt) print(x) #输出:['China'] ### 3.2 search() 函数 `search()` 函数搜索字符串中的匹配项,如果存在匹配则返回 Match 对象。 如果有多个匹配,则仅返回首个匹配项,如果未找到匹配,则返回值 `None` #search() 函数搜索字符串中的匹配项,如果存在匹配则返回 Match 对象 txt = "China is a great country" x = re.search(r"\s", txt) print("第一个空格位置", x.start()) #输出:第一个空格位置 5 ### 3.3 split() 函数 `split()` 函数返回一个列表,其中字符串在每次匹配时被拆分: #spilt 分割 txt = "China is a great country" x = re.split(r"\s", txt) print(x) #输出:['China', 'is', 'a', 'great', 'country'] 通过指定 `maxsplit` 参数来控制出现次数: #通过指定 maxsplit 参数来控制出现次数: txt = "China is a great country" x = re.split(r"\s", txt, 2) print(x) ['China', 'is', 'a great country'] ### 3.4 sub() 函数 `sub()` 函数把匹配替换为您选择的文本: #sub() 函数把匹配替换为您选择的文本: txt = "China is a great country" x = re.sub("is", "IS", txt) print(x) #输出:China IS a great country ### 3.5 Match 对象 Match 对象是包含有关搜索和结果信息的对象。 注释:如果没有匹配,则返回值 `None`,而不是 Match 对象。 Match 对象提供了用于取回有关搜索及结果信息的属性和方法: * `span()` 返回的元组包含了匹配的开始和结束位置 * `.string` 返回传入函数的字符串 * `group()` 返回匹配的字符串部分 #正则表达式查找以大写 "C" 开头的任何单词 txt = "China is a great country" x = re.search(r"\bC\w+", txt) print(x.span()) #输出:(0, 5) #打印匹配的字符串部分 print(x.group()) #输出:China [源码下载](https://www.bilibili.com/video/BV1ym4y177Mi/?share_source=copy_web&vd_source=9d355f8f6c7b586c7b86933516ad200d "源码下载") [若此文档不够详细,​可以参考十分钟学会python_哔哩哔哩_bilibili​](https://www.bilibili.com/video/BV1ym4y177Mi/?vd_source=18e22fa6e062dedab8e58d0d0b2b646a "若此文档不够详细,​可以参考十分钟学会python_哔哩哔哩_bilibili​")

相关推荐
tangweiguo030519872 分钟前
Django REST Framework 构建安卓应用后端API:从开发到部署的完整实战指南
服务器·后端·python·django
Dfreedom.3 分钟前
在Windows上搭建GPU版本PyTorch运行环境的详细步骤
c++·人工智能·pytorch·python·深度学习
兴科Sinco21 分钟前
[leetcode 1]给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数[力扣]
python·算法·leetcode
程序员奈斯31 分钟前
Python深度学习:NumPy数组库
python·深度学习·numpy
yongche_shi33 分钟前
第二篇:Python“装包”与“拆包”的艺术:可迭代对象、迭代器、生成器
开发语言·python·面试·面试宝典·生成器·拆包·装包
深度学习lover33 分钟前
<数据集>yolo梨幼果识别数据集<目标检测>
python·yolo·目标检测·计算机视觉·数据集
刀客1231 小时前
测试之道:从新手到专家实战(四)
python·功能测试·程序人生·测试用例·集成测试·学习方法·安全性测试
mit6.8241 小时前
[rStar] 解决方案节点 | `BaseNode` | `MCTSNode`
人工智能·python·算法
这里有鱼汤1 小时前
低价股的春天来了?花姐用Python带你扒一扒
后端·python
Elastic 中国社区官方博客1 小时前
介绍 Python Elasticsearch Client 的 ES|QL 查询构建器
大数据·开发语言·数据库·python·elasticsearch·搜索引擎·全文检索