学习python 正则表达式——与你同行!

正则表达式定义

  又称为规则表达式,是一个特殊的字符序列,利用事先定义好的一些特定字符以及它们的组合组成一个‘规则’,检查一个字符串是否与这种规则匹配来实现对字符的检索、过滤、匹配、替换。正则表达式需要用到re模块,该模块不是独立的第三方库,不需要单独安装,但是使用时必须预先导入。re模块提供了正则表达式操作所需的所有功能。

努力路上与你同行!

      • 正则表达式定义
  • 1. `.`:表示除换行符以外的任意一个字符;`\S`: 表示除空白符以外的任意一个字符
  • 2. `[]`:指定字符集
  • 3. `^`:匹配行首,匹配以^后面的字符开头的字符串
  • 4. `$`:匹配行尾,匹配以$之前的字符结束的字符串
  • 5. `\`:反斜杠后面可以加不同的字符以表示不同的特殊意义
  • 6. `*`:匹配位于*之前的字符或子模式的0次或多次出现
  • 7. `+`:匹配位于+之前的字符或子模式的1次或多次出现
  • 8. `?`:匹配位于?之前的0个或1个字符
  • 9.`{m,n}`:表示至少有m个重复,至多有n个重复。m和n均为十进制数。
  • 例题
    • 例一
    • 例二
    • 例三
    • 例四

https://blog.csdn.net/hanhanwanghaha宝藏女孩的成长日记 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)

元字符:在构建正则表达式时,有些特殊字符和自身并不匹配,而是用来表明应和一些特殊的东西匹配,或者会影响重复次数,这些特殊字符称为元字符。

注: re模块中的findall方法以列表的形式返回所有能匹配的子串,如果没有找到匹配的,则返回空列表。

常用的元字符。

1. .:表示除换行符以外的任意一个字符;\S: 表示除空白符以外的任意一个字符

import re
s = 'Hello,i am a college student.My name is Wang Tiantian.h\nb'
print(s)
print(re.findall(r'a',s))      #使用re.findall()方法返回所有能够匹配出的子串
print(re.findall(r'n..',s))
print(re.findall(r'm\S',s))

运行结果:
在这里插入图片描述

2. []:指定字符集

(1)常用来指定一个字符集,如[abc],[a-z],[0-9];
(2)元字符在中括号中不起作用,如[akm\S]、[m.]中的元字符都不起作用;
(3)中括号内的‘’表示补集,匹配不在区间范围内的字符,如[3]表示除3以外的任意字符。

import re
s = 'x5x2x0x13xx1x4xxyz'
print(re.findall(r'x[0-9]',s))
print(re.findall(r'x[0-9]x',s))
print(re.findall(r'x[0-9][0-9]x',s))
print(re.findall(r'x[^3]',s))

运行结果:

在这里插入图片描述

3. ^:匹配行首,匹配以^后面的字符开头的字符串

import re
s = 'how world How are you How many students'
print(re.findall(r'^h[o].',s))

运行结果:
在这里插入图片描述

4. $:匹配行尾,匹配以$之前的字符结束的字符串

import re
s = 'hello,I am wang! so I love you'
print(re.findall(r'you$',s))
print(re.findall(r'hello$',s))b = 'sdma jdksmi djskjd masdmw'
# $在[]中作为普通字符
print(re.findall(r'm[aiw$]',b))
# 匹配ma,mi,mw结尾的字符串
print(re.findall(r'm[aiw]$',b))
# 匹配ma,mi,mw,m$结尾的字符串
print(re.findall(r'm[aiw$]$',b))

运行结果:
在这里插入图片描述

5. \:反斜杠后面可以加不同的字符以表示不同的特殊意义

(1)\b匹配单词头或单词尾;
(2)\B与\b相反,匹配非单词头或单词尾;
(3)\d匹配任何十进制数;相当于[0-9];
(4)\D与\d相反,匹配任何非数字字符,相当于[^0-9];
(5)\s匹配任何空白字符,相当于[\t\n\r\f\v];
(6)\S与\s相反,匹配任何非空白字符,相当于[^\t\n\r\f\v];
(7)\w匹配任何字母、数字或下画线字符,相当于[a-zA-Z0-9_];
(8)\W与\w相反,匹配任何非字母、数字和下画线字符,相当于[^a-zA-Z0-9_];
(9)也可以用于取消所有的元字符:\、[;
(10)这些特殊字符都可以包含在[]中。如:[\s,.]将匹配任何空白字符、",“或”."。

import re
s = '0x12x3x567x8x49y'
print(re.findall(r'[0-9]',s))
print(re.findall(r'\d',s))
# 匹配字母x或者数字
print(re.findall(r'x\d',s))
print(re.findall(r'[x\d]',s))

运行结果:

在这里插入图片描述

6. *:匹配位于*之前的字符或子模式的0次或多次出现

import re
s = 'a ab abb abbbbb abbbbbxa'
re.findall(r'ab*',s) 

运行结果:
在这里插入图片描述

7. +:匹配位于+之前的字符或子模式的1次或多次出现

import re
s = 'a ab abb abbbbb abbbbbxa'
print(re.findall(r'ab*',s))
print(re.findall(r'ab+',s))

运行结果:
在这里插入图片描述

8. :匹配位于?之前的0个或1个字符

当“?”紧随其他限定符(*、+、{n}、{n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。

import re
s = 'a ab abb abbbbb abbbbbxa'
print(re.findall(r'ab+',s))     #+符号后没有问号:默认的贪心模式(尽可能长)
print(re.findall(r'ab+?',s))    #+符号跟问号:非贪心模式(尽可能短)

运行结果:
在这里插入图片描述

9.{m,n}:表示至少有m个重复,至多有n个重复。m和n均为十进制数。

忽略m表示0个重复,忽略n表示无穷多个重复。
{0,}等同于*;{1,}等同于"+";{0,1}与"?"相同,但是最好使用后者。

import re
s = 'a b baaaabaacccaa '
print(re.findall(r'a{1,3}',s))
print(re.findall(r'a+',s))
print(re.findall(r'a{1,}',s))
print(re.findall(r'a{,3}',s))
print(re.findall(r'a{3}',s))
s = '021 - 33507yyz,021 - 33507865,010 - 12345678,021 - 123456789'
print(re.findall(r'021 - \d{8}',s))
# \b匹配字符串的头和尾
print(re.findall(r'\b021 - \d{8}\b',s))

运行结果:

在这里插入图片描述

例题

例一

随机产生10个长度为1-25之间,由字母、数字、下划线、‘.’、‘#’、‘%’特殊字符组成的字符串构成列表,
找出列表中符合下列要求的字符串:长度为5~20,必须以字母开头,可带数字、下划线、‘.’。

import string
import random
import re
List1 = []#生成包含大小写字母、数字和其他指定字符的字符串
x = string.ascii_letters+string.digits+'_.#%'
#生成列表List1
for i in range(10):#生成字符作为元素,个数为1~25随机数之间的字符列表yy = [random.choice(x) for i in range(random.randint(1,25))]#用join方法将y中的元素合并成字符串,并将其加入列表List1中List1.append(''.join(y))
#输出列表List1
print('生成的列表为:')
for s in List1:print(s)
print()# 查找符合要求的字符串:
#(1)总长度为5~20
#(2)以字母开头(1个字符):^[a-zA-Z]{1}
#(3)可带数字、下划线、'.',至尾部共4~19个:[a-zA-Z0-9._]{4,19}$
#构建正则表达式
r = r'^[a-zA-Z]{1}[a-zA-Z0-9._]{4,19}$'
print('满足要求的字符串是:')
for i in List1:if re.findall(r,i):print(i)

运行结果:
在这里插入图片描述

例二

编写程序,生成一个包含十个不重复的取自a~z(随机生成)的小写字母的列表,将原列表中‘abcdefg’字母字符按位置顺序分别替换为‘1234567’数字字符,即a替换为1,b替换为2,以此类推。先输出原列表和新列表,再采用字符串格式化方式逐个输出新列表中的元素。

# coding=utf-8"""
编写程序,生成一个包含十个不重复的取自a~z(随机生成)的小写字母的列表,
将原列表中‘abcdefg’字母字符按位置顺序分别替换为‘1234567’数字字符,即a替换为1,b替换为2,
以此类推。先输出原列表和新列表,再采用字符串格式化方式逐个输出新列表中的元素。
"""import randomlist1 = []
i = 0
while i < 10:c = chr(random.randint(ord('a'), ord('z')))if c not in list1:i += 1list1.append(c)
print('原列表:', list1)
s1 = ','.join(list1)#通过maketrans和translate函数实现字符的替换
t = ''.maketrans("abcdefg", '1234567')
s2 = s1.translate(t)
list2 = s2.split(',')
print("新列表", list2)
print("逐个输出新列表中的元素:")
for i in list2:print("%s" % i, end='')

运行结果:
在这里插入图片描述

例三

生成15个包括10个字符的随机密码,密码中的字符只能是大小写字母、数字和特殊字符“@”、“$”、“#”、“&”、“_”、“~”构成。

# coding=utf-8"""
生成15个包括10个字符的随机密码,
密码中的字符只能是大小写字母、
数字和特殊字符“@”、“$”、“#”、“&”、“_”、“~”构成。
"""import string
import randompassword1 = string.ascii_letters + string.digits + "@$#&_~"
for i in range(15):print("随机密码" + str(i + 1) + ":", end=" ")password2 = "".join([random.choice(password1) for i in range(10)])print(password2, end=" ")print()

在这里插入图片描述

https://blog.csdn.net/hanhanwanghaha宝藏女孩的成长日记 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)

例四

# coding=utf-8"""
给定列表x=["13915556234", "13025621456", "15325645124", "15202362459"],
检查列表中的元素是否为移动手机号码,这里移动手机号码的规则是:手机号码共11位数字;
以13开头,后面跟456789中的某一个;或者以15开头,后面跟01289中的某一个。
"""import rex = ["13915556234", "13025621456", "15325645124", "15202362459"]zz = r'^(13[4-9]\d{8})|(15[01289\d{8}])$'
print("打印所有号码:", x)print("其中,为移动手机号码的为:")
for i in x:if re.findall(zz, i):print(i)

运行结果:
在这里插入图片描述
近日新感悟:如果遇到不是很确定是否要解决阻碍,那不妨退一万步,用最初的目标来衡量这件事是否值得。或者以客观的态度来衡量此事!

接下来这一年得好好努力了,希望明年的这个时候我已上岸!也祝所有考研的小伙伴一起努力,最后能够去到想去的大学!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 编译procto错误处理

运行&#xff1a;python -m grpc_tools.protoc --proto_path. --python_out. --grpc_python_out. helloworld.proto 出现如下错误&#xff1a; helloworld.proto: No such file or directory 解决方案&#xff1a; 解决方法一&#xff1a; cd 到helloworld.proto 的根目录 …

【Python】function、module、Package及import导入方法

计算机程序开发中&#xff0c;随着程序代码越写越多&#xff0c;在一个文件里代码就会越来越长&#xff0c;越来越不容易维护。 为了编写可维护的代码&#xff0c;我们把很多函数分组&#xff0c;分别放到不同的文件里面&#xff0c;这样&#xff0c;这个文件包含的代码就相对…

学习《数据结构》要爬的第一步梯子

小王开始专业课的复习一、数据结构是什么二、数据结构中基本概念和术语2.1数据结构的概念2.2按照不同功能划分逻辑结构2.3存储结构中重点顺序存储举例链式存储举例三、抽象数据类型的表示与实现3.1数据类型3.2抽象数据类型 &#xff08;ADTs: AbstractData Types&#xff09;3.…

python gRPC测试helloworld

一、测试helloworld 1、在https://github.com/grpc/grpc 下载example 2、用cmd打开命令行&#xff0c;cd到helloworld的根目录 cd E:\pythoncode\gRPC\grpc-master\grpc-master\examples\python\helloworld 然后运行 python greeter_server.py 3、再用cmd打开另一个命令行…

k52zip shell band 流氓软件总是显示~

小王的烦恼问题Garbage解决办法解决一解决二解决三总结问题 &#xff08;我都不知道这流氓软件哪里来的&#xff0c;平时也就下点学习资料啥的&#xff09; 一打开电脑学习给我整蒙了下方工具栏左右两边平白无故整两条杠出来 电脑下方工具栏处右击——》点击工具栏——》取消勾…

Microsoft Visual Studio 无法启动程序“路径啪啦啪啦“. 系统找不到指定的文件。

遇到这个低级错误 点击出现 解决办法 我看了好久&#xff0c;心态都崩了&#xff0c;结果是我两个cpp文件都有main函数&#xff0c;注释掉一个main函数就行了。这种错误可不要再犯了&#xff0c;搞心态。

【Python】Windows下Python3虚拟环境搭建

我们知道python中&#xff0c;有些第三方库的包会有依赖关系&#xff0c;比如某天你想搭建django环境&#xff0c;它可能依赖某个package 2.0&#xff0c;然后过几天你又想要搭建其他环境&#xff0c;这时候可能它也需要同样的包&#xff0c;但是这个包的版本可能不需要那么高&…

pycharm+pyqt5配置

1、打开cmd输入pip3 install PyQt5 2、输入pip3 install PyQt5-tools -i https://pypi.doubanio.com/simple 3、打开pycharm。新建项目点击Setting--》Tools--> (1)添加Qtdesigner &#xff08;2&#xff09;添加PyUIC 4、点击 5、打开Qtdesigner。新建一个ui文件。保存在…

立志10天学会C++基础应用—day01

文章目录前言第一天感觉很实用的快捷键一、常识A01打印cHelloWorld.cppA02变量.cppA03常量.cppA04标识符命名规则.cppA05整型.cppA06sizeof的用法.cppA07实型.cppA08字符型.cppA09转义字符.cppA10字符串类型.cppA11布尔类型.cppA12数据的输入.cpp二、算术运算符A13算术运算符.c…

【Python】IDE环境Pycharm运行虚拟环境Django

上一篇文章我们通过举例介绍了如何安装RobotFramework虚拟环境&#xff0c;其实Django环境也可以通过相同办法安装 f: cd F:\python_env python -m venv Django_env F:\python_env\Django_env\Scripts activate pip install Django 这样我们就在虚拟环境下安装了Django&#x…

pycharm导入自己写的模块时,模块下方出现红色波浪线的解决方案

这种情况其实可以不用管&#xff0c;是可以正常运行的&#xff1b; 但是&#xff0c;如果看着不舒服&#xff0c;可以进行以下过程进行设置即可&#xff1a; file->settings->project->project structure->点击项目路径->点击Excluded。然后确定就正常显示了…

立志10天学会C++基础应用—day02 代码清晰易懂 涉及数据结构算法的知识 写完了~我也麻了

哈喽&#xff0c;很高兴又见面啦&#xff0c;一起加油一起学习&#xff0c;欢迎您的关注&#xff01;https://blog.csdn.net/hanhanwanghaha学习路上有您的关注是我的荣幸&#xff0c;一起进步是我的动力&#xff0c;明天也一起加油啊&#xff01; 以往链接 立志10天学会C基…

Python3导入自定义模块的3种方式

关于如何自定义一个模块&#xff0c;如果大家不懂的话还请先看下面这篇博文 ↓ http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318447437605e90206e261744c08630a836851f5183000) 模块是个好东西啊&#xff0c;大牛们开源共享许多…

Flask项目的部署详解

哈喽&#xff0c;很高兴又见面啦&#xff0c;一起加油一起学习&#xff0c;欢迎您的关注&#xff01;https://blog.csdn.net/hanhanwanghaha学习路上有您的关注是我的荣幸&#xff0c;一起进步是我的动力&#xff0c;明天也一起加油啊&#xff01; 目录宝塔更新Python版本apt安…

【Python】对象、类、元类

龟叔发明了Python&#xff0c;然后集成了一堆概念在这门语言里面&#xff0c;比如&#xff1a;迭代器&#xff0c;装饰器&#xff0c;函数&#xff0c;生成器&#xff0c;类&#xff0c;对象&#xff0c;协程等等。 这些概念对初学者似乎没一个好懂的&#xff0c;不过还有比这更…

JETBRAINS开发工具中Translation翻译插件的使用

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xf…

【Python】pdfminer3k模块批量转换本地PDF文件

上一篇文章自己研究了一下如何批量将word或者ppt文件转换为PDF文件&#xff0c;但是有时候我们也想要将pdf文件转换为word或者txt文件&#xff0c;方便复制和处理。本文主要通过调用pdfminer3k模块进行处理。 说明&#xff1a;本文是在Windows10下使用python最新的3.6版本虚拟…

Python读写json文件的简单实现

转载自https://blog.csdn.net/vitaminc4/article/details/77985175 介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式&#xff0c;但是也使用了类似于C语言家族的习惯(包括C、C、Java、Ja…

Nacos配置

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xf…

【Python】如何选择赋值和拷贝

在Python中&#xff0c;一切皆为对象&#xff0c;对象通过「变量名」引用&#xff0c;「变量名」更确切的叫法是「名字」&#xff0c;好比我们每个人都有自己的名字一样&#xff0c;我们通过名字来代指某个人&#xff0c;代码里面通过名字来指代某个对象。变量赋值就是给对象绑…