part 1 正则表达式
正则表达式:用来做字符串查找、匹配、切割的一种工具。
Python对正则表达式的支持,提供re模块(Python内置的模块)
包含字符串匹配,查找,切割的相关的方法
fullmatch(正则表达式,字符串):用正则表达式和字符串进行
匹配,看能否成功匹配。
正则表达式:是一个符合正则规范的字符串
import re
#正则表达式的字符串前面要加r阻止转义,
# 因为正则表达式的符号中有很多带转义符号,
# 其功能不是转义,而是表示特殊的意义。
#1. .:匹配一个任意字符
re_str = '.'
re.fullmatch(re_str, 'a')
#2.匹配第一个字符是a第二个字符是b
re_str = 'ab'
re_str = 'a.'
#3匹配第一个字符是a第二个字符是任意字符的字符串
re_str = r'a.'
#4.\w:匹配一个字符是字母,数字,或者下划线
re_str = r'\w'
print(re.fullmatch(re_str,'b'))
#5.\s匹配一个空白字符(空格、换行、制表符))
re_str = 'ar\sb'
#\d 匹配一个数字字符
re_str = '\d\d\d'
print(re.fullmatch(re_str,120))
#6.边界检测
\b
#字符开开始和结束都是边界
#匹配三个任意字符的前面和后面都是单词边界的字符串
#^匹配字符串的开始
#(^the)匹配以the为开头的字符串
re_str = r'^the'
print(re.fullmatch(re_str,'the'))
#7.匹配字符串结束
re_str = r'abc$'
#8.\W 匹配非数字字母下划线
#9.\S匹配非空白字符
#10\D匹配非数字字符
#11\B 检测非边界
re_str = r'ab\B
part 2
import re
"""
1.匹配中括号中出现的任意一个字符
匹配一一个字符串,前三位是abc,第四位是字符1或者字符a
"""
re_str = r'abc[1a]'
print(re.fullmatch(re_str, 'abca'))
#第一个是数字或者下划线,后面是abc
re_str = r'[\d_]abc'
print(re.fullmatch(re_str, '9abc'))
#2.[^]匹配不在中括号中出现的任意一个字符
re_str =r'abc[^\da]'
#匹配一个字符串,前三位是abc,第四位不是数字字符也不是字符a
#3.*匹配0次或者多次
re_str =r'\d*abc'
#匹配一个字符串前面是0个或者是多个数字字符,然后是abc
# [0-9]匹配1到9
# [a-z]匹配小写字母a-z
# [A-Z]匹配任意一个大写字母
#[a-zA-z]匹配任意字母
#写一个正则表达式匹配判断一个字符串是数字字符串
re_str = r'\d[0-9]*'
print(re.fullmatch(re_str, '123'))
#写一个正则表达式检测一个字符串是否是合格的标识符(字母数字下划线)
re_str = r'[a-zA-z_]\w*'
print(re.fullmatch(re_str, 'name'))
#4.+:匹配一个字符串或者多次
#匹配一个字符串开头出现一个或者多次数字字符,然后在有0次或者多次数字,字母,下划线
re_str = r'\d+\w*'
print(re.fullmatch(re_str, '12u3abc'))
#5.?:匹配出现0次或者1次
re_str = r'[a-z]?123'
print(re.fullmatch(re_str, 'a123'))
#判断一个字符串是不是正整数字符串
re_str = r'[+]?[1-9]\d*'
print(re.fullmatch(re_str, '+0123'))
#6匹配N次{N}
re_str = r'\d{5}abc'
#前面5个数字然后abc
#6.{n,} >=n次
#7,{m,n}最少M次最多N次
#8 |:分支
#匹配一个字符串,是三个数字字符或者三个小写字母
re_str = r'\d{3}|\[a-z]{3}'
#9括号()匹配的时候是分组,让括号中的正则条件变成一个整体
"""========以下了解========"""
# 尽可能少:在能够匹配到的前提下尽可能少
# 10. *? 重复任意次,尽可能少的重复
re_str = r'ba*?b'
print(re.match(re_str, 'baabaa'))
# 11. +? 重复一次或多次,尽可能少的重复
re_str = r'ba+?'
print(re.match(re_str, 'baaaa'))
# 12. ?? 重复0次或者1次, 尽可能少的重复
re_str = r'b??'
# 13. {N,}? 重复至少N次,尽可能少的重复
# 14. {N, M}? 重复N到M次,尽可能少的重复
part 3 转义
1.特殊符号转义
正则中:. \ [] {} () * + ? ^ $ | 这些字符有特殊意义,所以在正则表达式中,
如果想要单纯表达这些字符,需要在前面加'';
注意:1. -,[],^,\ 在中括号中可能是特殊的符号,需要加
2. . {} () * + ? $ |在中括号中可以不用加,来表示字符
part 4 模块方法
import re
"""
1.compile(正则字符串)讲正则表达式字符串转换成正则表达式对象
#转换成正则表达式对象后,可以通过对象调用方法。
"""
re_obct = re.compile(r'\w{6,12}')
print(re_obct.fullmatch('dwadwa'))
#匹配相关的方法
#2.full,match(正则表达式,需要匹配的字符串)完全匹配
#返回值是匹配对象,如果不成功返回None
match = re.fullmatch('\w{3}', '132')
print(match)
#a.获取匹配到的结果
print(match.group())
#b.获取匹配到的范围
print(match.span())
print(match.start())#开始下标
print(match.end())#结束下标
print(match.string)
#3.match(正则表达式,字符串)不完全匹配,从字符串开头匹配,匹配到正则表达式对应的范围为止。
match = re.match(r'\w{3}', 'hedslakdl')
print(match.group())
print(match.string)
#应用:判断一个字符串是否以某种字符串开头
#4.search(正则表达式,字符串)在指定的字符串中查找某种字符串(以正则表达式来描述)
print(re.search(r'\d{2,}[a-z]', '1245465dwad113'))
#返回值是匹配对象,如果找不到返回None
#判断一个字符串中是否包含某种字符串
#5.findall(正则表达式,字符串)获取指定字符串中所有满足正则条件的所有的子串
#返回值是一个列表,列表里都是符合要求的字符串
result = re.findall(r'[a-zA-Z](\d+)','a132bdwa456465dwa')
print(result)
#注意:在通过正则表达式获取子串的时候,可以通过在正则表达式中添加括号,来约束获取的内容(只获取括号中匹配的内容)匹配所有。
#应用:字符串提取
#括号语法无效
result = re.finditer(r'[a-zA-Z](\d+)','a132bdwa456465dwa')#返回一个迭代器,迭代器的内容是匹配对象
print(result.__next__())
#7.re.split(正则表达式,字符串)按正则表达式匹配到的字符串进行切割
result = re.split(r'/d+', '12ds4a364dsa4d3sa15')
print(result)
#sub替换(正则表达式,替换字符串,原字符串)原字符串查找符合正则的子串,替换成新的字符串
#将制定字符串所有的SB替换成*
str1 = '傻逼,你好sb,你全家都是SB,傻逼,傻子'
result = re.sub(r'sb|SB|Sb|sB|傻逼|傻', '**', str1)
print(result)
网友评论