正则表达式
正则表达式是对字符串操作的⼀种逻辑公式,就是⽤事先定义好的⼀些特定字符、及这些特定字符的组合,组成⼀个“规则字符串”,这个“规则字符串”⽤来表达对字符串的⼀种过滤逻辑。
- 需要引⼊内置模块re
- 缺点:效率低下,能⽤字符串⽅法完成尽量使⽤字符串的⽅法
- 优点:编码简单
1.为什么使⽤正则表达式
2.正则表达式的组成
原子 |
含义 |
原子 |
含义 |
\d |
0-9中任何⼀个字符 [0-9] |
\w |
0-9a-zA-Z的中任何⼀个字符 [0-9a-zA-Z] |
\D |
⾮0-9中的任何⼀个字符[^0-9] |
\W |
⾮0-9a-zA-Z_的中任何⼀个字符[^0-9a-zA_Z] |
\s |
\n\r\t 空格 |
. |
代表除\n之外的任何字符 |
\S |
⾮\n\r\t 空格中任何⼀个字符[^\n\t\r ] |
\b |
词边界 |
[] |
⾃⼰创建的原⼦表,[0-4]代表0-4中任何⼀个字符 |
\B |
⾮词边界 |
[^] |
排除原⼦表中的字符 |
\A |
字符串开始 |
^ |
⾏⾸;在原⼦表中表示排除 |
\Z |
字符串的结尾 |
$ |
⾏结尾 |
- |
表示域,0-9就表示0到9所有数字字符 |
[\u4e00-\u9fa5] |
匹配纯中⽂ |
|
|
量词 |
含义 |
量词 |
含义 |
{} |
表示重复前⼀个原⼦的次数 |
* |
重复0次或多次{0,} |
{m} |
表示重复前⼀个原⼦的m次 |
+ |
⾄少出现1次{1,} |
{m,n} |
表示重复前⼀个原⼦的最少m次,最多n次 |
? |
出现0次或1次{0,1} |
{m,} |
表示重复前⼀个原⼦的最少m次 |
*?,+? |
取消贪婪 |
() |
改变优先级,取⼦元素 |
x|y |
表示匹配x或者y |
修饰符 |
含义 |
修饰符 |
含义 |
re.S |
使.匹配所有字符 |
re.I |
不区分⼤⼩写 |
re.L |
本地化识别 |
re.M |
多⾏匹配 |
re.U |
根据Unicode字符集解析字符,会影响\b、\B、\w、\W |
|
|
注意:
- 模式字符串⼀定要使⽤原⽣字符串,也就是⽤r开头的字符串。r’www’
- 严格区分⼤⼩写
- 如果正则表达式中有{,},[,],-,?,*,|^,$,.等做普通字符,则要将其转义
3.正则常⽤⽅法
原型:re.match(pattern,string,flags=0)
功能:从字符串起始位置匹配⼀个模式,如果不是从起始位置匹配则返回None
参数:patter 模式
string 要匹配的字符串
flag 模式修正符
返回值: 匹配成功返回⼀个Match object,失败返回None
print(re.match(r'www','www.baidu.com'))
print(re.match(r'www','http:///www.baidu.com'))
print(re.match(r'www','cctv.www.baidu.com'))
ret = re.search(r'(abc)+', 'xxxabcabcabcdef')
print(ret.group(0))
print(ret.group(1))
print(ret.span())
print(ret.groups())
结果
原型:re.search(pattern, string, flags=0)
功能:顺序扫描字符串,找到第.个匹配项结束
参数:patter 模式
string 要匹配的字符串
flag 模式修正符
返回值:匹配成功,返回match object,否则返回None
print(re.search(r'll','hello'))
print(re.search(r'll','heLLo',re.I))
原型:findall(pattern, string, flags=0)
功能:扫描整个字符串,并返回结果列表
参数:patter: 匹配的正则表达式
string: 要匹配的字符串
flags:模式修正符
返回值:如果匹配成功返回⼀个列表,包含了所有匹配项,失败返回空列表
print(re.findall(r'oo','kksdkoosdflsdfooksdfsdoOppppweOo',re.I))
原型:split(pattern