re 模块——正则表达式的梳理
一、正则表达式的介绍:
1、主要用于字符串的匹配、提取处理
2、regular :正则表达式的英文
二、regular 表达式学习手册
https://tool.oschina.net/uploads/apidocs/jquery/regexp.html
https://gitee.com/thinkyoung/learn_regex
三、正则表达式的用途:
1、匹配 —— 符合规则的自负床,则认为匹配了
2、提取 —— 提取出符合规则的字符串
python 有个专门的模块来处理:re 模块,使用的时候直接引入即可
四、re模块的常用方法如下:
1、re.match(re规则,字符串):从开始匹配,从字符串的第一个字符开始匹配如果第一个字符不匹配规则,那么匹配失败。
2、re.search (re规则,字符串):匹配包含。不要从字符串的第一个字符就匹配,主要字符串当中有匹配该规则的,则就匹配成功。
3、re.findall(re规则,字符串):把所有匹配的字符 放在列表中并返回
4、re.sub (re规则,替换串,被替换串):匹配字符并替换
五、正则表达式的语法
1、表示单字符串匹配表达式
import re # 引入re模块 data = 'hwu12oa123189awoa258694aiurjh_707fj11b&*^%$opugdf中文呀bvc' (1)表示匹配除“\n”之外的任何单个字符串要匹配包括“\n”在内的任何字符,请使用像“(.|\n)”的模式。(\n表示换行符). res = re.findall('.',data) # 将除了换行符(\n)之外的单个字符全部匹配出来 print(res) # 返回的是列表 (2) \d 表示匹配一个数字字符。等价于[0-9]。 res = re.findall('\d',data) # 将0-9的数字以单个字符全部匹配出来 print(res) # 返回的是列表 (3)\D 匹配一个非数字字符。等价于[^0-9]。 res = re.findall('\D',data) # 将除了数字以外的所有字符以单个字符全部匹配出来 print(res) # 返回的是列表 (4)\w 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。 res = re.findall('\w',data) # 将[A-Za-z0-9_]范围内的(包括下划线)任何单词字符以单个字符全部匹配出来,这里就不包括特殊字符 print(res) # 返回的是列表 (5)\W 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。 res = re.findall('\W',data) # 这里是只包括特殊字符,然后以单个字符匹配出来,不包括[A-Za-z0-9_]范围内的(包括下划线)得任何单词字符 print(res) # 返回的是列表 (6)\s 匹配空白,即 空格,tab键 res = re.findall('\s',data) # 这里是将空格匹配出来,其他一律不包括 print(res) # 返回的是列表 (7)\S 匹配非空白,其余都匹配出来 res = re.findall('\S',data) # 这里是将除了空格外,其余所有的字符都匹配出来 print(res) # 返回的是列表
2、多选项匹配
(1)[xyz] 字符集合。匹配所包含的任意一个字符。 res = re.findall('[7mn]',data) # 这里给定了需要匹配的字符(7mn),如果都有以都单个字符形式都匹配出来或者任意一个有即可匹配出来 print(res) # 返回的是列表 (2)[a-z] 字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。 res = re.findall('[0-5]',data) # 这里给定了需要匹配的字符的范围(0-5之间)的字符全部匹配出来 print(res) # 返回的是列表 (3)x|y 表示匹配x或y,x和y可以是多个字符 res = re.findall('abc|123',data) # 这里给定了2个需要匹配的字符,二选一有一个有就匹配出来 print(res) # 返回的是列表
3、表示数量上的匹配表达式
(1){n} n是一个非负整数。匹配前一个字符的n次,明确指定匹配的次数 res = re.findall('.{3}',data) # 将除了换行符(\n)之外的所有字符全部以三个一组匹配出来 print(res) # 返回的是列表 res = re.findall('\d{3}',data) # 将数字全部以三个一组匹配出来,不够则不匹配 print(res) # 返回的是列表 (2){n,m} n和m均为非负整数,匹配前一个字符最少匹配n次且最多匹配m次,明确指定匹配的次数范围 # 贪婪模式: res = re.findall('\d{3,5}',data) # 默认是贪婪模式,默认匹配连续的最大值5个,不够则类推,直到最小3次,不够则不匹配 print(res) # 返回的是列表 # 非贪婪模式:尽可能的匹配更小,就是只匹配最小值 res = re.findall('\d{3,5}?',data) # 加一个问号转换成非贪婪模式,只会去最小值就完了,比如这个就只会匹配3个次数,不够则不匹配 print(res) # 返回的是列表 (3) {n,} 匹配前一个字符至少n次 res = re.findall('\d{3,}',data) # 最少匹配是给定的最小值,没有最大值上限,不够则不匹配,比如这里是没有最大值上限,那么就会匹配最大值,不够则类推,直到最小值 print(res) # 返回的是列表* (4)匹配前一个字符, 0次或者多次 res = re.findall('1*',data) # 符合条件的,但是没有匹配到的是0次,1是可以匹配到的就是多次 print(res) # 返回的是列表 (5)最常用的是这个,需要熟记 res = re.findall('1.*?',data) # 明确数量限定了从1开始,匹配所有的 print(res) # 返回的是列表 (6)+ 匹配前一个字符,1次或者多次 res = re.findall('\d+',data) # 符合条件的,但是只匹配出现1次或者多次的 print(res) # 返回的是列表 (7)? 匹配前一个字符,0次或者1次 res = re.findall('w?',data) # 符合条件的,但是没有匹配到的是0次,w是可以匹配到的就是1次 print(res) # 返回的是列表
4、边界字符控制的表达式
边界的匹配-用来表示字符串或者单词的边界 如字符串开头,单词开头等
(1)^ 匹配输入字符串的开始位置 res = re.findall('^[a-z]',data) # 匹配开头的字符在a-z的范围内单个字符 print(res) # 返回的是列表 res = re.findall('^[a-z]+',data) # 匹配开头的字符在a-z的范围内的1次或者多次字符 print(res) # 返回的是列表 (2)$ 匹配输入字符串的结尾位置 res = re.findall('[a-z]$',data) # 匹配结尾的字符在a-z的范围内单个字符 print(res) # 返回的是列表 res = re.findall('[a-z]+$',data) # 匹配结尾的字符在a-z的范围内的1次或者多次字符 print(res) (3)
5、表示()匹配分组:将括号里的匹配提取出来
(1)()提取 res = re.findall('a(\d+)a',data) # 表示匹配a和a中间的数字,只想要之间的用括号即可 print(res) # 返回的是列表 # 第二种方式非贪婪模式:牢记这个(.*?) res = re.findall('a(.*?)a',data) # 表示匹配a和a中间的数字,只想要之间的用括号括起来(.*?) print(res) # 返回的是列表 # 这个是贪婪模式,匹配最长的(.*) res = re.findall('a(.*)a',data) # 表示匹配a和a中间的数字,只想要之间的用括号括起来(.*?) print(res) # 返回的是列表 # 例如: da = '{"member_id": #member_id#,"amount":600,money:#user_money#,username:"#user#"}' res = re.findall('#(.*?)#',da) # 表示匹配#和a中间的数字,只想要之间的用括号括起来(.*?) print(res) # 返回的是列表