正则表达式
from re import fullmatch,search
re是python里提供专门使用正则表达式的相关函数
1.什么是正则表达式
正则表达式是一种让字符串处理更简单的工具(本质是做字符串匹配的)
2. 正则表达式的语法
fullmatch(正则表达式,字符串) - 让正则表达式和字符串进行完全匹配,如果匹配失败,结果是None python的正则表达式:r’正则表达式’
1)普通字符 - 表示字符本身
re_str
= r
'abc'
result
= fullmatch
(re_str
,'abc')
print(result
)
2) 特殊字符
. - 匹配一个任意字符
re_str1
= r
'.abc.'
result
= fullmatch
(re_str1
,'FabcF')
print(result
)
3) \w - 匹配任意一个数字、字母或者下划线(针对ASCII码表有效,平时不用)
re_str2
= r
'\wabc'
result
= fullmatch
(re_str2
,'_abc')
print(result
)
4)\d - 匹配任意数字字符
re_str3
= r
'\d\d\d'
result
= fullmatch
(re_str3
,'123')
print(result
)
5) \s - 匹配任意一个空白字符
re_str
= r
'\s\d..'
result
= fullmatch
(re_str
,'\n9k/')
print(result
)
6) \D和\S
\字母 - 小写字母和对应大写字母的功能相反
re_str1
= r
'\dabc\D'
result
= fullmatch
(re_str1
,'8abc-')
print(result
)
7) [字符集] - 匹配字符集中出现的任意一个字符
注意:一个[]只能匹配一个字符
a. [abc123] - 匹配a,b,c,1,2,3中任意一个字符 b. [a-z] - 表示匹配从字符a到字符z之间的任意一个字符 [a-zA-Z] - 匹配任一字母 [\u4e00-\u9fa5]
re_str
= r
'[abcABC]123'
result
= fullmatch
(re_str
,'c123')
print(result
)
练习:判断输入的手机号是否正确
re_str
= r
'1[3-9]\d\d\d\d\d\d\d\d\d'
result
= fullmatch
(re_str
,'18')
print(result
)
注意:[]中-前面的字符编码值必须小于-后面字符的编码值,[]中-如果不在两个字符中间,-就没有特殊功能,直接表达它本身
re_str
= r
'[a-zA-Z0-9_]abc'
result
= fullmatch
(re_str
,'/abc')
print(result
)
8) [^字符集] - 取字符集以外的任一字符
3. 检测符号
\b - 检测是否是单词的边界 单词边界:字符串开头,字符串结尾,凡是能区分出两个不同单词的符号 注意:检测类符号不影响匹配长度,只是在匹配成功的时候做进一步检测
re_str
= r
'\d\d\b\d\d'
result
= fullmatch
(re_str
,'12 34')
re_str
= r
'\d\d.\b\d\d'
result
= fullmatch
(re_str
,'12 34')
2)^ - 检测^所在位置是否是字符串开头
re_str
= r
'\d^abc'
print(fullmatch
(re_str
,'1abc'))
re_str
= r
'^\d\d\dabc'
print(fullmatch
(re_str
,'123abc'))
print(search
((r
'^\d\d\d'),'ads345abc'))
3)
检
测
检测
检测所在的位置是否是字母的结尾
print(search
((r
'\d\d\d$'),'ads345abc'))
4. 匹配次数
1)* - 匹配0次或多次
字符* - 字符出现0或多次
re_str
= r
'a*'
print(fullmatch
(re_str
,'ads345abc'))
re_str
= r
'123[a-z]*'
print(fullmatch
(re_str
,'123wqhis'))
2)+ - 匹配一次或多次
re_str
= r
'a+'
print(fullmatch
(re_str
,'a'))
3) ? - 匹配0次或1次
re_str
= r
'\d?abc'
print(fullmatch
(re_str
,'0abc'))
练习:写一个正则表达式可以匹配任一整数字符串
re_str
= r
'[-+]?\d+'
print(fullmatch
(re_str
,'78923474893702148973219847039'))
4) {}
{N} - 表示匹配N次 {M,N} - 匹配M到N次 {M,} - 至少匹配M次 {,N} - 最多匹配N次
re_str
= r
'\d{4}abc'
print(fullmatch
(re_str
,'1234abc'))
re_str
= r
'\d{4,6}abc'
print(fullmatch
(re_str
,'1234567abc'))
re_str
= r
'\d{4,}abc'
print(fullmatch
(re_str
,'1234567abc'))
re_str
= r
'\d{,4}abc'
print(fullmatch
(re_str
,'1234567abc'))
5. 贪婪和非贪婪
在匹配次数不确定的情况下,匹配模式分为两种:贪婪和非贪婪 贪婪:默认都是贪婪的(在能匹配到的前提下匹配次数尽可能多) *、+、?、{M,N}、{M,}、{,N} 非贪婪:(在能匹配成功的前提下,匹配次数尽可能少)在匹配次数不确定的时候,次数后面加问号,匹配就是贪婪的 *?、+?、??、{M,N}?、{M,}?、{,N}?
re_str
= r
'\d{2,}'