正则表达式

今天我们来介绍下正则表达式。
正则表达式在线联系网站

正则表达式(Regular Expression)是一种用于匹配文本模式的工具。它是由普通字符(例如字母、数字)和特殊字符(称为元字符)组成的文本模式描述。通过使用正则表达式,可以快速、灵活地在大量文本中查找、替换符合特定模式的字符串,比如验证用户输入的电子邮件地址、电话号码是否符合格式要求,或者从网页文本中提取特定格式的链接等。

在python中,在正则表达式用re库实现

import re

匹配字符串
  • match()函数

    match(参数1,参数2) 参数2(字符串类型数据)中找参数1(正则表达式)的内容

    如果参数2起始位置匹配不成功,返回None,如果起始位置匹配成功,返回匹配内容。

    python 复制代码
    import re
    str='哇哈哈,康师傅,白象'
    print(re.match('哇哈哈',str)) 
    print(re.match('白象',str))
  • search()函数

    search(参数1,参数2) 参数2(字符串类型数据)中满足参数1(正则表达式)的内容

    如果匹配了多个参数1,只返回第一个匹配成功的信息。

    python 复制代码
    import re
    str='哇哈哈,康师傅,白象,哇哈哈,小米'
    print(re.search('哇哈哈',str))
  • findall()函数

    findall(参数1,参数2) 参数2(字符串类型数据)中查找满足参数1(正则表达式)的内容

    如果匹配了多个参数1,返回匹配成功的全部信息。

    特别注意:findall()并不返回匹配的位置,只返回匹配的全部内容。

    python 复制代码
    import re
    str='哇哈哈,康师傅,白象,哇哈哈,小米'
    print(re.findall('哇哈哈',str))
正则表达式

正则表达式是一种使用特殊符号表示字符串的规则。以下将从字符范围、字符出现的次数以及同一类字符3个方向介绍正则表达式

  • 字符范围
字符 含义
[xyz] 字符集合。匹配所包含的任意一个字符。
[a-z] 字符范围。匹配指定范围内的任意字符。
python 复制代码
import re
str='C,C++,Python,Java,C#,Python37'
print(re.search('[y]',str)) #<re.Match object; span=(7, 8), match='y'>
print(re.findall('[0-9]',str))  #['3', '7']
print(re.findall('[n]',str))    #['n', 'n']
print(re.findall('[n][0-9]',str))   #['n3']
  • 字符出现的次数
字符 含义
* 匹配前面的子表达式任意次
+ 匹配前面的子表达式一次或多次
匹配前面的子表达式0次或一次
^ 匹配输入行首
$ 匹配输入行尾
{n} 匹配n次,n为非负整数。
{n,} 至少匹配n次,n为非负整数。
{n,m} 最少匹配n次,最多匹配m次。n和m均为非负整数。
python 复制代码
import re
str='fe34h24u56n3h5j6n5j4k23456'
#匹配正则表达式中前面为a~z范围内连续出现任意次的字符,倒数第二个字符是数字,倒数第一个字符是a~z的字母。
print(re.findall('[a-z][0-9]*[a-z]',str))   #['fe', 'h24u', 'n3h', 'j6n', 'j4k']

验证手机号的正确性手机号码以1开头,且一共有11位数字

python 复制代码
import re
phone_num=input("请输入您的手机号:")
result=re.findall('^1[0-9]{10}$',phone_num)
print(result)

验证QQ号码是否合规QQ号码的位数为5~11位,第一个数字不能为0

python 复制代码
import re
QQ_number=input("请输入您的QQ号:")
result=re.findall('[1-9][0-9]{4,10}$',QQ_number)
print(result)
  • 同一类字符
字符 含义
\d 匹配一个数字类字符,等价于[0-9]
\D 匹配一个非数字类字符,等价于[^0-9]
\s 匹配任何不可见字符,等价于[\f\n\r\t\v]
\S 匹配任何可见字符,等价于[\f\n\r\t\v]
\w 匹配包括下划线任何单词字符,等价于[A-Za-z0-9_]
\W 匹配不包括下划线任何单词字符,等价于[^A-Za-z0-9_]
\b 匹配一个单词的边界,即单词中与空格邻接的字符
\B 匹配非单词边界
\f 匹配一个分页符
\n 匹配一个换行符
\r 匹配一个回车符
\t 匹配一个制表符
\v 匹配一个垂直制表符
. 匹配除\n\r之外的任何单个字符
贪婪和非贪婪模
  • 贪婪模式

    匹配形式是尝试匹配尽可能多的字符。默认匹配模式都是贪婪模式。

  • 非贪婪模式

    匹配形式是尝试匹配尽可能多的字符。在次数限制操作符后面加上?可以将匹配模式转换为非贪婪模式。

python 复制代码
import re
str='678gdjde923836oc0dv8899v75676d9v0'
print(re.findall('v\d+',str))   #['v8899', 'v75676', 'v0']
print(re.findall('v\d+?',str))  #['v8', 'v7', 'v0']
或和组
  • 或:用|表示,表示将两个匹配条件进行逻辑或(or)运算。

    python 复制代码
    import re
    str='flower low lower lowest pow own west'
    #匹配满足'\w+ow'条件或者满足'we\w+'条件的内容。
    #'\w+ow'表示匹配一个或多个单词字符,且后面的字符为ow
    #'we\w+'表示匹配一个或多个单词字符,且前面的字符为we
    result=print(re.findall('\w+ow|we\w+',str))
    #输出为['flow', 'low', 'low', 'low', 'pow', 'west']
  • 组:用(表达式)表示,表示将()中的表达式定义为组,并且将匹配这个表达式的字符保存到一个临时区域,一个正则表达式中最多可以保存9个组。

    python 复制代码
    import re
    str='flower low lower lowest power own west'
    #匹配内容第1个字符是e开始,已知匹配到最后一个字符r,第1组匹配一个或多个除\n\r之外的任何单个字符,默认使用贪婪模式
    #   第2组匹配,一个除\n\r之外的任何单个字符
    result=print(re.findall('e(.+)(.)r',str))
    #输出:[('r low lower lowest pow', 'e')]
sub()和compile()方法
  • sub() 将字符进行替换

    sub(参数1,参数2,参数3) 将字符串参数3中所有与参数1匹配的字符串替换为参数2

    python 复制代码
    import re
    str='678gdjde923836oc0dv8899v75676d9v0'
    print(re.sub('\d','0',str))
    #输出:00gdjde000000oc0dv0000v00000d0v0
  • compile()将字符串转换为正则表达式

    compile()创建一个正则表达式对象,可以直接使用正则表达式对象的方法匹配其他内容。

    python 复制代码
    import re
    str1='2024 12 02 12:00'
    str2=re.compile('\d{2}:\d{2}')
    print(str2)     #re.compile('\\d{2}:\\d{2}')
    print(str2.findall(str1))       #['12:00']
相关推荐
V+zmm101342 分钟前
社区二手物品交易小程序ssm+论文源码调试讲解
java·微信小程序·小程序·毕业设计·ssm
坊钰5 分钟前
【Java 数据结构】合并两个有序链表
java·开发语言·数据结构·学习·链表
秋天下着雨12 分钟前
apifox调用jar程序
java·python·jar
素**颜14 分钟前
uniapp 基于xgplayer(西瓜视频) + renderjs开发,实现APP视频播放
javascript·uni-app·音视频
bs_10114 分钟前
【保姆式】python调用api通过机器人发送文件到飞书指定群聊
python·机器人·飞书
m0_7482510816 分钟前
docker安装nginx,docker部署vue前端,以及docker部署java的jar部署
java·前端·docker
A227418 分钟前
Redis——缓存雪崩
java·redis·缓存
Mr.朱鹏18 分钟前
操作002:HelloWorld
java·后端·spring·rabbitmq·maven·intellij-idea·java-rabbitmq
顽疲39 分钟前
从零用java实现 小红书 springboot vue uniapp (6)用户登录鉴权及发布笔记
java·vue.js·spring boot·uni-app
Redamancy_Xun43 分钟前
软件老化分析
python·程序人生·安全威胁分析·可信计算技术·安全架构