正则表达式
fullmatch(正则表达式,字符串) - 判断整个字符串是否满足正则表达式所描述的规则
findall(正则表达式,字符串) -提取字符串中所有满足正则表达式的字符串
search(正则表达式,字符串) -匹配字符串中第一个满足正则表达式的字串
注意:python中表达式一个正则表达式一般用r字符串
正则符号
正则符号
1.普通符号 - 在正则表达式中表符号本身的符号
2 . 点 -匹配任意一个字符
3. \d -匹配任意一个数字字符
4. \s -匹配任意一个空白字符
5.\w - 匹配任意一个字母、数字、下划线或者中文
6.\W \D \S 与 \w \d \s 功能相反
7.[字符集] -匹配在字符集中的任意一个字符
[abc\d] -可以是a 或 b 或c 或任意一个数字
[a-z] -匹配任意个小写字母
[a-zA-Z] -匹配任意一个字母
[a-zA-Z\d] -匹配任意一个或者数字
[a-z=%] -匹配任意一个小写字母或者 = 或者 %
[\u4e00-\u9fa5] -匹配任意一个中午
8.[^字符集] -匹配不在字符集中的任意一个字符
result = fullmatch(r'abc', 'abc')
print(result)
result = fullmatch(r'.bc', 'gbc')
print(result)
result = fullmatch(r'\d\dabc', '08abc')
print(result)
result = fullmatch(r'123\sabc', '123\tabc')
print(result)
result = fullmatch(r'abc\w123', 'ad')
result1 = fullmatch(r'abc[^MN]', 'abc)123')
print(result1)
匹配次数符号
第二类符号:匹配次数符号
1. * - 任意次数(0次或者1次或者任意数)
a* - a出现任意次数
\d* - 任意多个数字
[abc]* -
2. ? - 0次或者 1次 -最多1次
3. + - 至少一次
"""
result = fullmatch(f'1a*2', '12') # 对的,可以是0个
print(result) #
"""
{N} - N次
{M,N} - M到N
{M,} - 最少M次
{,N} - 最多N次
"""
# 练习:写一个正则表达式,可以匹配任意一个除了0的整数。
# 合法:233、+234、-7283、100、-2000
# 不合法:0、0002、2.23
# result=fullmatch(r'[-]?[1-9]\d*','1123')
# print(result)
"""
贪婪和非贪婪模式
在匹配次数不确定的时候,如果有多种次数都可以匹配成功,贪婪取最多的那个次数,非贪婪取最少的那个次数
(默认贪婪)
贪婪模式:+,?,*
非贪婪模式:+?、??、*?、 加?号
"""
分支和分组
============第三类符号:分组和分支=========
正则表达式中可以用()将部分内容括起来表示一个整体,括号括起来的部分就是一个分组
a.整体操作的时候需要分组
b.重复匹配-正则中可以通过\M来重复它前面从头往后数第M个分组匹配的结果
c.提取分组匹配到的结果(捕获分为自动捕获(findall)和手动捕获)
"""
# '23M'、'89K10L'、09H23P90Q33W'、.
result = fullmatch(r'(\d\d[A-Z])+', '09H23P90Q33W')
print(result)
# "23H23'、'90K90'、'78N78'、'10U10'
result = fullmatch(r'(\d\d)[A-Z]\1', '90K90')
print(result)
result = fullmatch(r'(\d{3})([a-z]{2})=\2\1{2}', '234km=km234234')
print(result)
# findall在正则表达式中有分组的时候,会自动提取正则匹配结果中分组匹配到的内容
message = '技术上234,jsskf8992==技术njk==9223-ssjs233结束时间453'
result = findall(r'[\u4e00-\u9fa5](\d+)', message)
print(result)
#匹配对象.group(N) -获取匹配结果中指定分组匹配到的内容
#提取身高
message ='我是小明,今年23岁,身高180厘米,体重70kg'
result = search(r'身高(\d+)厘米,体重(\d+)kg', message)
print(result)
#
转义符号
转义符号:在本身具有特殊功能或者特殊意义的符号前加 \ ,让特殊符号变成普通
"""
result = fullmatch(r'\d\d\.\d\d','12.34')
print(result)
result = fullmatch(r'\([a-z]{2}\)','(az)')
print(result)
re模块
1)fullmatch(正则,字符串)–用整个字符串和正则,匹配成功返回匹配对象,匹配失败返回None
2)findall(正则,字符串)·获取字符串中所有满足正则的子串,默认返回一个列表,列表中的元素是所有匹配到的子串(存在自动捕获现象)
3)search(正则,字符串)-匹配第一个满足正则的子串,匹配成功返回匹配对象,匹配失败返回None
4)split(正则,字符串)-将字符串中所有满足正则的子串作为切割点进行切割
5)split(正则,字符串,N)-将字符串中前N个满足正则的子串作为切割点进行切割
6)sub(正则,字符串1,字符串2)-将字符串2中所有满足正则的子串都替换成字符串1
7)sub(正则,字符串1,字符串2,N)
8)finditer(正则,字符串)–获取字符串中所有满足正则的子串,返回一个迭代器,迭代器中的元素是匹配对象
"""
str1 ='技术7晋级赛7jsks7就开始看'
print(str1.split('7'))
str1 ='技术22晋级赛709jsks511就开始80看'
print(split(r'\d+' , str1, 2))
str1 ='技术22晋级赛709jsks511就开始80看'
print(sub(r' ld','+', str1))
message ='妈的,SB,都打起来了你还在打野!草!F u c k'
print(sub(r'(?i)妈的|sb|草|操|艹|f\s*u\s*c\s*k','*', message))
sr1 ='技术22晋级赛709jsks511就开始80看'
result = finditer(r'\d+', str1)
print(list(result))
print(fullmatch(r'\d{3}','234'))
print(match(r'\d{3}', '234卡咖啡'))
print(fullmatch(r'(?i)abc','abc'))
print(fullmatch(r'(?i)abc ','Abc'))
print(fullmatch(r'(?i)abc', 'ABc'))
print(fullmatch(r'(?i)abc', 'aBc'))
print(fullmatch(r'abc.123', 'abcin123'))
print(fullmatch(r'(?s)abc.123', 'abc\n123'))