文章目录
正则表达式的概念与作用
概念:正则表达式是一种字符串匹配的模式
作用:检查一个字符串是否含有某个子串;替换匹配的子串;提取某个字符串中的子串(爬虫中常用)
示例
#先导入模块
import re
普通字符匹配
print(re.findall('abc','abc'))#有就返回
print(re.findall('abc','adc'))#adc中没有abc所以就返回空
print(re.findall('abc','dabcf'))#只要里面有abc就行
print(re.findall('dabcf','abc'))#反过来当然不行了
[‘abc’]
[]
[‘abc’]
[]
点号
#可以匹配除了换行符以外的任意一个字符
print(re.findall('a.c','abc'))
print(re.findall('a.c','a&c'))
print(re.findall('a...c','abddc'))
print(re.findall('a.c','a\nc'))#换行符就不行了
[‘abc’]
[‘a&c’]
[‘abddc’]
[]
print(re.findall('a.c','a.c'))
print(re.findall('a\.c','a.c'))#要是我只想匹配 点符号 可以试一下转义符
print(re.findall('a\.c','abc'))#此时abc就不行了,转义符号的作用就发挥出来了
[‘a.c’]
[‘a.c’]
[]
中括号
#中括号里面是否包含 后面
print(re.findall('a[bc]d','abd'))
print(re.findall('a[bc]d','acd'))
print(re.findall('a[bc]d','aed'))
[‘abd’]
[‘acd’]
[]
预定义的字符集
print(re.findall('\d','123'))#可以看到\d是可以匹配的,但是都分开了,因为d一次匹配一个字符)
print(re.findall('\w','Az123'))#\w可以匹配字符和数字
print(re.findall('\w','Az123中文'))#中文也是可以的
print(re.findall('\w','Az123中文$%^'))#特殊字符就不行了
[‘1’, ‘2’, ‘3’]
[‘A’, ‘z’, ‘1’, ‘2’, ‘3’]
[‘A’, ‘z’, ‘1’, ‘2’, ‘3’, ‘中’, ‘文’]
[‘A’, ‘z’, ‘1’, ‘2’, ‘3’, ‘中’, ‘文’]
数量词
print(re.findall('abc*','abcc'))#两次c是可以的
print(re.findall('abc*','abccc'))#3次c是可以的
print(re.findall('abc*','ab'))#0次也是可以的
print(re.findall('abc*','abc'))#一次也是可以的
[‘abcc’]
[‘abccc’]
[‘ab’]
[‘abc’]
print(re.findall('a\d*','a123'))# \d可以匹配数字
print(re.findall('a\d*','a1234'))
print("看图查表就行了 不意义列举")
[‘a123’]
[‘a1234’]
findall()方法
import re
## findall方法,返回匹配的结果列表#
print(re.findall('\d','chaun12zhi24'))#因为\d匹配数字,匹配一个字符,所以就返回了下面几个数字
print(re.findall('\d+','chaun12zhi24'))#符号“+”的作用就显示出来了 匹配前一个字符一次或者无限次 这里是数字
[‘1’, ‘2’, ‘2’, ‘4’]
[‘12’, ‘24’]
## findall方法中flag参数的作用
print(re.findall('a.bc','a\nbc'))#此时匹配不了,前面 .和\n 不能匹配
print(re.findall('a.bc','a\nbc',re.DOTALL))#这样 点符号就可以匹配任何字符了 包括换行符
print(re.findall('a.bc','a\nbc',re.S))#这样 点符号就可以匹配任何字符了 包括换行符
[]
[‘a\nbc’]
[‘a\nbc’]
## findall方法中flag分组的使用
print(re.findall('a.+bc','a\nbc',re.DOTALL))#如果没有()则返回与整个正则匹配的列表
print(re.findall('a(.+)bc','a\nbc',re.DOTALL))#如果有()则只返回()里面的内容,小括号两边的东西负责确定提取数据所在位置
[‘a\nbc’]
[’\n’]
r原串
#1在不使用r原串的时候,遇到转移字符怎么做
print(re.findall('a\nbc','a\nbc'))#这个时候可以匹配成功
print(re.findall('a\\nbc','a\\nbc'))#这两种情况都匹配不上
print(re.findall('a\nbc','a\\nbc'))#这两种情况都匹配不上
print(re.findall('a\\\nbc','a\\nbc'))#三个斜杠匹配不上
print(re.findall('a\\\\nbc','a\\nbc'))#4个斜杠匹配上了 官方文档就这么规定的
[‘a\nbc’]
[]
[]
[]
[‘a\nbc’]
print(re.findall(r'a\nbc','a\nbc'))#r原串在正则中就可以消除转义符带来的影响
print(re.findall(r'\d','a123'))#扩展:可以解决写正则的时候,不符合PEP8规范的问题
[‘a\nbc’]
[‘1’, ‘2’, ‘3’]
总结
不一定全部都记住,会用会查就OK(如果您发现我哪里写的不对,欢迎在评论区批评指正)。