Day 16 re模块

Day 16

1.re模块

1.re.compile(正则表达式)

根据正则表达式创建一个正则表达式对象

re_obj = re.compile('\d{3}')
re_obj.fullmatch('234')
re_obj.search('jshdfjk238jhskfskdf890')
2.re.fullmatch(正则表达式,字符串)

获取字符串和正则表达式完全匹配的结果(看整个字符串是否满足正则的规则);如果匹配失败返回None,如果匹配成功返回匹配对象

result = re.fullmatch(r'(\d{3})-([a-z]{2})', '897-yu')
print(result)   # <re.Match object; span=(0, 6), match='897-yu'>

1)获取匹配到的字符串(重要)

匹配对象.group() — 获取整个正则表达式匹配到的结果

匹配对象.group(N) ---- 获取正则表达式中第N个分组匹配到的结果

result = re.fullmatch(r'(\d{3})-([a-z]{2})', '897-yu')
print(result)   # <re.Match object; span=(0, 6), match='897-yu'>
print(result.group())   # 897-yu
print(result.group(1))  # 897
print(result.group(2))  # yu

2)获取匹配结果在原字符串中的位置信息,返回开始下标和结束下标(结束下标取不到)

print(result.span())    # (0, 6)
print(result.span(2))   # (4, 6)

3)获取原字符串

print(result.string)
3.re.match(正则表达式,字符串)

将字符串的开头和仲则表达式进行匹配

re_str = r'\d{3}'
print(re.fullmatch(re_str,'256'))
print(re.match(re_str,'245jhjgvhgcvv'))
4.re.search(正则表达式,字符串)

在字符串中查找第一个满足正则的子串,如果没有找到返回None,如果找到了,返回匹配对象

print(re.search(re_str,'hvjhgff567nbmvhcgh'))
5.re.findall(正则表达式,字符串)

获取字符串中所有满足于正则的子串。返回值是列表,列表中的元素是满足于正则的子串

print(re.findall(r'\d{3}'),'hsjgv567hasjghf456jhvjhgv786')

如果正则有一个分组

print(re.findall(r'\d{2}-[A-E]{2}', '是否23-ABss试试9223-CB;sd00-AA--009'))   # ['23-AB', '23-CB', '00-AA']
print(re.findall(r'(\d{2})-[A-E]{2}', '是否23-ABss试试9223-CB;sd00-AA--009'))  # ['23', '23', '00']

如果正则有两个分组

print(re.findall(r'(\d{2})-([A-E]{2})', '是否23-ABss试试9223-CB;sd00-AA--009'))  # [('23', 'AB'), ('23', 'CB'), ('00', 'AA')]
6. re.finditer(正则表达式, 字符串) - 获取字符串中所有满足正则的子串。返回值是一个迭代器(序列),序列中的元素是匹配对象
result = re.finditer(r'(\d{2})-([A-E]{2})', '是否23-ABss试试9223-CB;sd00-AA--009')
# print(list(result))
for x in result:
    print(x.group(), x.group(1), x.group(2))
7. re.sub(正则表达式,字符串1,字符串2)

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

str1 = 'hbjhgjgf67ghvhgc576ghg55'
result = str1.replace('23','+')  
# 用replace的话一次只能替换一个效率低
result = re.sub(r'\d+','+',str1)
print(result)
# 练习:王者荣耀脏话屏蔽功能
sentence = '你丫是傻  叉吗? 我操你大爷的. F   u c k you.'
result = re.sub(r'(?i)傻\s*(叉|b|B|瓜)|f\s*u\s*c\s*k|操|sb', '*', sentence)
print(result)
8.re.split(正则表达式,字符串)

将字符串中满足正则的子串作为切割点进行切割

sentence = 'gvajhggfchatsrd哈njbmajb比jmb和v'

result =re.split(r'[a-c]',aentence)
print(result)   # 切割点是a,b,c来切割

2.忽略大小写问题

import re

方法一:在正则表达式的前面加(?i)

print(re.fullmatch(r'(?i)123[a-z]','123M'))
加(?i)

方法二:

print(re.fullmatch(r'123[a-z]','123k'flags = re.I'))              

3.单行匹配

多行匹配的时候:不能匹配换行(默认)

单行匹配的时候:可以匹配换行

方法一:在正则表达式的最前面加 (?s)

print(re.fullmatch('123.abc', '123\nabc'))   # None

print(re.fullmatch('(?s)123.abc', '123\nabc'))   # <re.Match object; span=(0, 7), match='123\nabc'>
print(re.fullmatch('123.abc', '123\nabc', flags=re.S))   # <re.Match object; span=(0, 7), match='123\nabc'>

# 既忽略大小写又单行匹配
print(re.fullmatch('(?is)123.abc', '123\nABC'))   # <re.Match object; span=(0, 7), match='123\nABC'>
print(re.fullmatch('123.abc', '123\nABC', flags=re.S | re.I))   # <re.Match object; span=(0, 7), match='123\nABC'>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值