1.正则表达式的符号
正则表达式:用来做字符串查找、匹配、切割用的一种工具、
1 .匹配一个任意字符
2.\w 匹配一个字符是字母、数字或者下划线
- \s 匹配一个空白字符(空格,回车,换行,制表符)
- \d 匹配一个数字字符
- \b 检测边界(单词边界---一般的符号都可以作为单词边界)
re_str = r'\b...\b'
print(re.match(re_str,'jsh,abc'))
6.^ 匹配字符串开始(^The --匹配以The开头的字符串)
re_str =r'^The'
print(re.match(re_str,'Thewfs'))
- $ 匹配字符串结束
e_str = r"abc$"
print(re.fullmatch(re_str,'abc'))
print(re.findall(re_str,'hsksdd jksds abc'))
8.\W 匹配非字母,数字、下划线
9.\S 匹配非空白字符
10.\D 匹配非数字字符
10.\B 检测非边界
2.正则表达符号组合
1.[]匹配[]中出现的任意一个字符
'''匹配一个字符串,前面是abc',第四位字符是1或者a'''
re_str = r'abc[1a]'
print(re.fullmatch(re_str,'abc1'))
2.[^]匹配不在[]中出现的任意一个字符
'匹配一个字符串,前三位是abc,第四位不是数字也不是字符a的字符串'''
re_str = r'abc[^\da]'
print(re.fullmatch(re_str,'abcd'))
3.* 匹配0次或者多次
[0-9]:匹配0,1,2,3,4,5,6,7,8,9
[1-8]:匹配1,2,3,4,5,6,7,8,
[a-z]:匹配任意一个小写字母
[A-Z]:匹配任意一个大写字母
[a-zA-Z]: 匹配所有的字母
写一个正则表达式,判断一个字符是数字字符串
re_str = r'\d\d*'
写一个正则表达式,检测一个字符串是否是合格的标识符(字符数字下划线组成,数字不开头)
re_str = r'[a-zA-Z_]\w*'
4.:+ 匹配一次或者多次
- ? 匹配0次或者1次
// 判断一个字符串是否是正整数字符串(除0)'123'-->成功
re_str = r'[+]?[1-9]\d*'
- {N} 匹配N次
7.{N,}匹配大于等于N次
8.{M,N}匹配至少M次,最多N次
- | 分之(or)
- () 匹配的时候分组,让括号中的正则条件变成一个整体
'''匹配一个字符串,abc整体重复三次'''
re_str = r'(abc){3}'
print(re.fullmatch(re_str,'abcabcabc'))
3.正则表达式
正则: . \ [] ^ $ | + -? () 这些字符有特殊意义,如果想要单纯的表达这些字符,
需要下前面加‘\’’
注意:1. -, [] , ^, \在中括号中可能是特殊的符号,需要加‘\’
2. . {} * + ? $ | 在中括号中可以不用加,来表示字符
4.re模块方法
方法名 | 功能 |
---|---|
compile | 将正则表达式字符串转换成表达式对象 |
fullmatch(正则表达式,字符串) | 完全匹配,从字符串开头匹配到结尾 |
match(正则表达式,字符串) | 不完全匹配,从字符串开头开始匹配,匹配到正则表达式对应的范围位置 |
search(正则表达式,字符串) | 在指定的字符串中查找某种字符串 |
split(正则表达式,字符串) | 按正则表达式匹配到字符串中进行切割 |
sub(正则表达式,新字符串,原字符串) | 在原字符串中查找符合正则的子串,替换成新的字符串 |
if __name__ == '__main__':
# 1.compile 将正则表达式字符串转换成表达式对象
#转换成正则表达式对象后,可以通过对象调用相关方法
re_obct= re.compile(r'\w{6,12}')
print(re_obct.fullmatch('sdfdsg'))
print(re.fullmatch(r'\w{6,12}','sdfdsg'))
# 2.fullmatch(正则表达式,字符串) 完全匹配,从字符串开头匹配到结尾
# 返回值是匹配对象,如果匹配失败返回None
match = re.fullmatch('\w{3}','shd')
print(match)
# a.获取匹配的结果
print(match.group()) #shd
# b.获取匹配到的范围
print(match.span()) #(0, 3)
# c.获取匹配的开始下标和结束下标
print(match.start(),match.end())
# d.获取被匹配的字符串(原字符串)
print(match.string)
# 应用:判断一个字符串是否是某种字符串
# 3.match(正则表达式,字符串)不完全匹配,从字符串开头开始匹配,匹配到正则表达式对应的范围位置
# 返回值是匹配对象,如果匹配失败返回None
match = re.match('\w{3}','h3d')
print(match)
print(match.group())
print(match.string)
# 应用:判断一个字符串是否以某种字符串开头
# 4. search(正则表达式,字符串)在指定的字符串中查找某种字符串(以正则表达式来描述)
# 若果有对个满足条件,只匹配第一个,如果找不到符合要求的返回None
print(re.search(r'\d{2,}[a-z]','sha23n--877m0899'))
# 应用:判断一个字符串中是否包含某种字符串
# 5.findall(正则表达式,字符串) 去获取指定字符串中满足正则条件的所有的子串
# 返回值是列表,列表符合要求的字符串,如果没有满足要求的子串就返回[]
result = re.findall(r'\D\d+\D','a123buye236oks')
print(result) #['a123b', 'e236o']
# 注意:在通过正则表达式获取子串的时候,如果通过在正则表达式中添加括号,来约束获取的内容(只捕获括号中匹配到的内容),匹配的时候还是按正则表达式去查找
result = re.findall(r'[a-zA-Z](\d+)','12a123buy=263ok98s')
print(result) #['123', '98']
# 应用:字符串提取
# 6.finditer(正则表达式,字符串)用大和findall一样,只是返回类型不一样
# 返回一个迭代器 迭代器中的内容是匹配对象
# 注意:()捕获部分无效
result = re.finditer(r'[a-zA-Z](\d+)','12a123buy=263ok98s')
for match in result:
print(match)
# print('asfds25dfafdgrh'.split('af'))
# 7.split(正则表达式,字符串)按正则表达式匹配到字符串中进行切割
# 返回值是列表,列表元素就是切割后被分段的字符串
result = re.split(r'\d+','a[hsj25]dfas*a7jid8e-eea')
print(result) #['a[hsj', ']dfas*a', 'jid', 'e-eea']
# 8.sub(正则表达式,新字符串,原字符串) 在原字符串中查找符合正则的子串,替换成新的字符串
"""将制定字符串中所有'sb'替换成"*" """
str1 = '你好sb,你全家都是sb'
result = re.sub(r'sb','*',str1)
print(str1,result)
re_str = r'[a-zA-Z_]\w*'
print(re.fullmatch(re_str,'5ew'))
网友评论