正则表达式

正则表达式

1.认识正则表达式

1.什么是正则表达式

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

正则并不是Python特有的语法(不属于Python),所有的高级语言都支持正则,正则的语法通用

不管通过正则表达式解决的是什么问题,写正则的时候都是咋子使用正则表达式描述字符串规则。

2.Python的re模块

re模块时Python用来支持正则表达式的一个模块,模块中包含了所有和正则相关的函数

fullmatch(正则表达式,字符串) - 判断正则表达式好指定的自负歘是否完全匹配(判断整个字符串是否符合正则表达式所描述的规则);如果匹配成功返回匹配对象,失败返回None

2.导入re模块中的常用函数

from re import fullmatch, findall

3.符号的用法

字符功能
.匹配任意字符
^开头、在[]中表示非
$以某个字符结尾
*匹配任意次数个的字符
+匹配1次或多次个的字符
?匹配0次或者1次个的字符
[]表示匹配方括号中任意的一个字符
{M,N}匹配M次到N次的字符
()表示分组

4.转义字符的用法

转义字符功能
\d表示一个数字类型的字符
\D表示一个非数字类型的字符
\s表示一个空白类型的字符
\S表示一个非空白类型的字符
\b表示单词边界
\B表示非单词边界
\w表示任意的字母数字字符,相当于[a-zA-Z0-9]
\W表示非字母数字字符

5.re模块的常用函数

函数功能
fullmatch()完全匹配,匹配失败则返回None
match()匹配开头字符,匹配失败返回None
search()匹配第一个能够和正则符合的子串,找不到则返回None
findakk()返回的是满足所有条件的子串(用列表包装)
finditer()返回的是满足条件的所有子串(用迭代器包装)
split()返回的是满足切割条件进行切割的子串
sub(正则,字符串1,字符串2)字符串2中满足正则的内容替换成字符串1,并返回

6.代码示例

# 基本用法
result = fullmatch(r'a[MN\d]b', 'aNb')
# <Match object; span=(0, 3), match='aNb'>
result1 = fullmatch(r'a[^MN\d]b', 'aBb')
# <Match object; span=(0, 3), match='aBb'>
result2 = fullmatch(r'[1-9]\d{4,11}', '1234567')
# <Match object; span=(0, 7), match='1234567'>

# 分组
result3 = fullmatch(r'([A-Z]{3}\d{2})[\u4e00-\u9fa5][A-Z]{3}', 'SDF55哈SDF')
result4 = fullmatch(r'(\d{2})([a-z])[\u4e00-\u9fa5]{2}\1\2', '55s哈哈55s')

# AttributeError: 'Match' object has no attribute 'match'
# 属性错误:'Match'对象没有属性'match'
result5 = fullmatch(r'([a-z])(\d{3})[\u4e00-\u9fa5]{2}\2', 's825哈哈825')
print(result5.span())
# (0, 9)

# 重复
message = '我今年18岁,月薪50088元,身高188,体重70公斤,8块腹肌。每年交308元的腾讯会员费。房贷每月3000元,车贷每月2288元。'
result6 = findall(r'\d+元', message)
# ['50088元', '308元', '3000元', '2288元']

# 捕获
result7 = findall(r'(\d+)元', message)
# ['50088', '308', '3000', '2288']

# 分支
result8 = findall(r'算([\u4e00-\u9fa5]|[\u4e00-\u9fa5]{2})求', '算什么求,算了,不算嘛求了')
# ['什么', '嘛']

# 转义
result9 = findall(r'\\d+\.\d+', '\d.879')  # ['\\d.879']
message1 = '12sadf456,asd史蒂夫54;sdf55;5adsf;asd;5 =8 55=sf '
result10 = findall(r'\d+', message1)  # ['12', '456', '54', '55', '5', '5', '8', '55']
result11 = findall(r'\d+\b', message1)  # ['456', '54', '55', '5', '8', '55']
result12 = findall(r'\b\d+', message1)  # ['12', '5', '5', '8', '55']
result13 = findall(r'\B\d+\B', message1)  # ['2', '45', '5', '5']

# match()
result = match(r'\d{3}', '546ashfjhas')
print(result)  # <re.Match object; span=(0, 3), match='546'>

# search()
result = search(r'\d{3}', 'asdf645asddd555asd')
print(result)  # <re.Match object; span=(4, 7), match='645'>

# finditer()
result = finditer(r'\d{3}', 'asdf645asddd555asd')
print(list(result))  # [<re.Match object; span=(4, 7), match='645'>, <re.Match object; span=(12, 15), match='555'>]

# split()
str1 = '123JHSKkxc会计哈决胜巅峰JLSKD855JAD=='
# 将str1中的J和K作为切割点对字符串进行切割
result = split(r'J|K', str1)
print(result)  # ['123', 'HS', 'kxc会计哈决胜巅峰', 'LS', 'D855', 'AD==']

# sub()
result = sub(r'\d', '+', '123JHSKkxc会计哈决胜巅峰JLSKD855JAD==') 
print(result)  # +++JHSKkxc会计哈决胜巅峰JLSKD+++JAD==

# group()
result = search(r'(\d{3})([A-Z]{2})', '-=2设计师234KM222哈哈宿舍239KH')
print(result.group(1))      # '234'

# (?i)
result = fullmatch(r'(?i)abc', 'ABC') # <re.Match object; span=(0, 3), match='ABC'>
print(result)

# (?s)
result =fullmatch(r'(?s)abc.123', 'abc\n123')  # <re.Match object; span=(0, 7), match='abc\n123'>
print(result)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值