python学习Day-17

Learning Diary for Python - 17

一、正则表达式

1.匹配类符号

# 1. 正则表达式
"""
正则表达式是一种可以让一些复杂的字符串问题变得简单的工具。
"""

# 2. 正则语法(通用)
# 1)re模块:
# fullmatch(正则表达式, 字符串)  -  判断整个字符串是否满足正则表达式描述的规则(完全匹配)
# python提供正则表达式的方法:提供一个字符串,字符串内容是一个正则表达式,这个字符串的最前面需要加r
# python的正则表达式: r'正则'
# js的正则表达式: /正则/
# oc的正则表达式:"正则"

# 2)正则语法内容
# 包括:匹配类符号、控制次数的符号、分组和分支、检测类符号

# 3.匹配类符号  -  约束字符串中某个位置上的字符是什么样的字符
# 1)普通符号(字符)
"""
在正则表达式表示字符本身的符号就是普通符号(除了特殊符号以外的都是普通符号)
"""
from re import fullmatch
# r'abc'  - 表示一个字符串有三个字符,分别是a、b和c
result = fullmatch(r'abc', 'abc')
print(result)

# 2) . - 匹配任意一个字符
# r'.bc' - 表示一个字符串,有3个字符,第一个字符是任意字符,第2个和第3个分别是b和c
result = fullmatch(r'.bc', '好bc')
print(result)

result = fullmatch(r'x..y', 'x-8y')
print(result)

# 3) \d  - 匹配任意一个数字字符
result = fullmatch(r'x\dy', 'x6y')
print(result)

# 4) \s  - 匹配任意一个空白字符
# 空白字符:任何可以产生空白效果的符号,例如:空格、\t、\n
result = fullmatch(r'x\sy', 'x\ny')
print(result)

# 5) \D  - 匹配任意一个非数字字符
result = fullmatch(r'x\Dy', 'xMy')
print(result)

# 6) \S - 匹配任意一个非空白字符
result = fullmatch(r'x\Sy', 'xay')
print(result)


# 7) [字符集]  - 匹配字符集中的任意一个字符
"""
[mnab] - 匹配m或者n或者a或者b
[\dmn]、[m\dn]  - 匹配任意数字或者m或者n
[\d\s]   -  匹配任意数字或者任意空白
[1-9]   -  匹配1到9中任意数字
[0-9]   - 和\d效果一样
[a-z]   -  匹配任意一个小写字母
[1-5a-z]  - 匹配数字1到5或者任意小写字母
[A-Za-z]  -  匹配任意一个字母
[\u4e00-\u9fa5]  -  匹配任意一个中文
[\u4e00-\u9fa5wp]  -  匹配任意一个中文或者w或者p
"""
result = fullmatch(r'x[Mn3+]y', 'xMy')
print(result)

result = fullmatch(r'x[\u4e00-\u9fa5\dwp]y', 'x3y')
print(result)


# 8) [^字符集]  - 匹配不在字符集中的任意一个字符
result = fullmatch(r'x[^mn]y', 'x-y')
print(result)

result = fullmatch(r'x[^\u4e00-\u9fa5]y', 'x0y')
print(result)

2.控制次数的符号

from re import fullmatch, search, findall
# 控制次数的符号的用法: 匹配类符号次数
# 1. *  - 任意次数(0或者多次)
"""
a*    -  a出现0次或者多次
\d*   -  \d出现0次或者多次(任意数字出现0次或者多次)
[abc]*   -  [abc]出现0次或者多次
"""
print(fullmatch(r'xa*y', 'xy'))
print(fullmatch(r'xa*y', 'xay'))
print(fullmatch(r'xa*y', 'xaaaay'))
print(fullmatch(r'x\d*y', 'xy'))
print(fullmatch(r'x\d*y', 'x121029000y'))

# 2. +   - 至少一次(1次或多次)
print(fullmatch(r'xa+y', 'xy'))     # None
print(fullmatch(r'xa+y', 'xaaaaay'))
print(fullmatch(r'x[\u4e00-\u9fa5]+y', 'x函数y'))

# 3. ?  -  0次或者1次
# 277、-728、+723
print(fullmatch(r'[+-]?[1-9]\d\d', '810'))
print(fullmatch(r'❤?xy', '❤xy'))

# 4.{}
"""
{N}     -  N次
{M,N}   -  M到N次
{M,}    -  至少M次
{,N}    -  最多N次
"""
print(fullmatch(r'1[3-9]\d{9}', '13892839283'))
print(fullmatch(r'123a{4}', '123aaaa'))
print(fullmatch(r'123a{2,4}', '123aaa'))
print(fullmatch(r'123a{2,}', '123aaaaaaaa'))

# 练习:写一个正则表达式可以匹配任意一个整数字符串
# 123、23、1、+23、-23、100,2, 2312312  - 合法
# 0002、23s、+-23、01  -  不合法
print(fullmatch(r'[+-]?[1-9]\d*', '10'))

# 4. 贪婪和非贪婪模式(了解)
# 在匹配次数不确定的时候,匹配次数有贪婪和非贪婪两种模式
"""
1)
默认是贪婪模式:*、+、{M,N}、{M,}、{,N}
贪婪模式:如果多种匹配次数都可以匹配成功,最后取最大的次数进行匹配

2)
非贪婪模式:*?、+?、{M,N}?、{M,}?、{,N}?
非贪婪模式:如果多种匹配次数都可以匹配成功,最后取最小的次数进行匹配
"""
# 贪婪
print(search('a.+b', '上访户大富豪amnbxybmnhjb按实际符合sdf'))      # 'amnbxyb'

# 非贪婪
print(search('a.+?b', '上访户大富豪amnbxybmnhjb按实际符合sdf'))     # 'amnb'

print(search('a.+b', '上
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值