python基础11 正则表达式

本文详细介绍了Python中正则表达式的各种概念,包括fullmatch方法、匹配类符号(如普通字符、数量限制、字符集等)、分组、分支与转义符,以及re模块提供的相关函数如match、search、findall和finditer等。
摘要由CSDN通过智能技术生成

1、认识正则表达式

一种可以让复杂的字符串问题变得简单的工具,目的就是用正则符号描述字符串规则

  • fullmatch -完全匹配
'''
fullmatch(正则表达式,字符串)   -让整个字符串和正则表达式进行匹配,
匹配成功返回匹配对象,匹配失败返回None
python中表示一个正则表达式的方式:r'正则表达式'
'''

2、匹配类符号

用来约束字符串的某个位置必须是什么样的字符

  • 普通字符(普通符号)

普通符号在正则表达式中表示符号本身

from re import fullmatch
result = fullmatch(r'abc','abc')
print(result)
  • . -匹配任意一个字符
result = fullmatch(r'a.c','a1c')
print(result)
  • \d -匹配任意一个数字字符
result = fullmatch(r'a\\dc','a5c')
print(result)
  • \s -匹配任意一个空白字符

空白字符:空格、\n、\t

result = fullmatch(r'a\\sc','a c')
print(result)
  • \w -匹配任意一个数字、字母、下划线或者中文
result = fullmatch(r'a\\wc','a哈c')
print(result)
  • \D、\S、\W
'''
\\D      -匹配任意一个非数字字符
\\S      -匹配任意一个非空白字符
\\W      -匹配任意一个非(数字、字母、下划线、中文)字符
'''
result=fullmatch(r'\\D\\S\\W','r5.')
print(result)
  • [字符集] -匹配在字符集中的任意一个字符
'''
[多个字符]   -匹配多个字符中的一个
[\\dxy]       -匹配任意一个数字或者x或者y
[\\d\\s]       -匹配任意一个数字或者任意一个空格
[1-9]        -匹配数字1-9中任意一个
[a-z]、[A-Z]
[a-zA-z]     -匹配任意一个字母
'''
result = fullmatch(r'a[123]c','a2c')
print(result)
result = fullmatch(r'a[0-9]b','a5b')
print(result)
  • [^字符集] -匹配不在字符集中的任意字符

    注意:^只能放在最前面才有特殊功能

result = fullmatch(r'a[^0-9]b','alb')
print(result)

3、匹配类符号匹配次数

  • *   -匹配任意次数
'''
a*     -任意个字符a
\\d*    -任意个\\d(数字字符)
可以一个都没有
'''
result = fullmatch(r'x\\d*y','x46145625y')
print(result)
  • +   -至少一次
result = fullmatch(r'x\\d+y','x46145625y')
print(result)
  • ? -最多一次(0次或1次)
result = fullmatch(r'x\\d?y','x4y')
print(result)
  • {} -指定次数
'''
{N}     -N次
{M,N}   -M到N次
{M,}   -至少M次
{,N}   -最多N次
'''
result = fullmatch(r'x\\d{5}y','x12345y')
print(result)
  • 贪婪和非贪婪

    当匹配次数不确定的时候,匹配的时候分为贪婪模式和非贪婪模式两种,默认是贪婪,如果有多种次数都可以匹配成功,贪婪取最多的次数进行匹配,非贪婪取最少的次数

'''
match(正则表达式,字符串)    -匹配字符串开头
贪  婪:直接写*、+、?、{}
非贪婪:*?、+?、??、{}?
'''
print(match(r'\\d{3}','265vssd'))

4、分组

() 在写正则表达式的时候可以使用()将正则表达式的部分内容括起来,被括起来的内容就是一个分组

4.1 整体操作

result = fullmatch(r'(\\d\\d[a-z]{3}){3}','12zsa15zxa26asa')
print(result)

4.2 重复

'''
重复:
在正则表达式中可以通过\\M来重复第M个分组中匹配到的内容
'''
result = fullmatch(r'(\\d\\d)[a-z]{3}\\1','12bbb12')
print(result)

4.3 捕获

'''
a、自动捕获:re模块中findall可以对正则表达式的匹配结果进行自动捕获(自动获取正则中分组匹配到的内容)

b、手动捕获:匹配对象.group() -获取整个正则匹配到的结果
            匹配对象.group(N) -获取第N个分组匹配到的结果
'''
result = fullmatch(r'(\\d{2})([a-z]+)','12dd')
print(result.group())          #12dd
print(result.group(1))         #12
print(result.group(2))         #dd

5、分支和转义符

5.1 分支 |

正则1|正则2 -先用正则1进行匹配,如果匹配失败在正则2进行匹配

print(fullmatch(r'ab\\d{3}|ab[a-z]{2}','ab419'))

5.2 转义符

在有特殊功能的符号面前加\,让有特殊功能的符号变成一个普通符号

注意:单独存在有特殊功能符号在[]中会自动变成一个普通符号

print(fullmatch(r'\\d\\d\\.\\d','12.7'))
print(fullmatch(r'[+]\\d','+1'))

6、检测类符号

检测类符号:在匹配成功的情况下检测对应的位置是否符合相关要求

  • \b -检测是否是单词边界(凡是可以把两个单词分开的符号:空白、英文的标点符号、字符串结尾)
str1 = '595buhjih95+muin895+9'
result = findall(r'\\d{3}\\b',str1)
print(result)                      #895
  • \B -检测是否不是单词边界
print(findall(r'\\B\\d{3}',str1))    #895
  • ^ -检测是否是字符串开头
print(findall(r'^\\d{3}',str1))     #595
  • $ -检测是否是字符串结尾

print(search(r'^1[3-9]\\d{9}$','19102871957'))

7、re模块

re模块是python专门用来提供和正则表达式相关函数的模块

  • fullmatch(正则表达式,字符串)

    完全匹配,正则表达式与就付出匹配,如果匹配成功返回匹配对象,匹配失败返回None

print(fullmatch(r'\\d','2'))
  • match

    匹配字符串开头,正则表达式与字符串开头进行匹配,匹配成功返回匹配对象,匹配失败返回None

print(match(r'\\d{3}','123abc'))
  • search

    匹配第一个字串(匹配字符串中第一个符合正则表达式规则的子串),如果匹配成功返回匹配对象,匹配失败返回None

print(search(r'\\d{3}','casfa594vdf569vdvf'))
  • findall

    提取字符串中所有满足正则表达式的子串,返回值是一个列表

print(findall(r'\\d{3}','dsfa2625sdc4dv849538e'))
#['262', '849', '538']
  • finditer

    提取字符串中所有满足正则表达式的子串,返回值是一个迭代器,迭代器中的元素是每一个匹配到的子串对应的匹配

print(finditer(r'\\d{3}','aef5898fawef569'))
<callable_iterator object at 0x000002C3E1E335E0>
  • split

    将字符串中所有满足正则表达式的子串作为切割点对字符串进行切割

print(split(r'\\d{3}','dsfa2625sdc4dv849538e'))
#['dsfa', '5sdc4dv', '', 'e']
  • sub(正则表达式,字符串1,字符串2)

    将字符串2中所有满足正则表达式的子串都替换成字符串1

print(sub(r'\\d{3}','黑','jvbjnrhd48s49878egwrsg4879ww'))
#jvbjnrhd48s黑78egwrsg黑9ww
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值