正则表达式定义
用一个字符串描述一个特征,然后进行验证另外一个字符串是否符合特征
正则表达式语法
import re
result = re.match( "正则表达式" ,"要匹配的字符串")
# re.match(r'lcl' , 'lcl')
r.group() # 如果上一步匹配到数据, 提取匹配到的数据
1、正则表达式中的普通字符
- 字母、数字、汉字、下划线、没有特殊定义的符号,均为普通字符,普通字符只匹配字符本身。
2、元字符
- . # (小数点) 匹配除了/n 以外的任意一个字符
- | # 逻辑或操作符
- [] # 匹配字符集中的一个字符
- [^] # 对字符集求反,也就是上⾯的反操作。尖号必须在⽅括号⾥的最前⾯
- - # 定义[]⾥的⼀个字符区间,例如[a-z]
- \ # 对紧跟其后的⼀个字符进⾏转义
- () # 对表达式进⾏分组,将圆括号内的内容当做⼀个整体,并获得匹配的值
3、转义字符
- \r,\n # 匹配回车核换行符
- \t # 匹配制表符
- \\ # 匹配斜杠 \
- \^ # 匹配^符号
- \$ # 匹配$ 符号
- \. # 匹配小数点
4、预定义匹配字符集
- \d # 任意一个数字(0-9)
- \w # 任意字母、数字、下划线(含大小写)
- \s # 空格、制表符、换页符
- \D # \d 的反集、非数字的任意一个字符
- \W # \w的反集、
- \S # \s 的反集
5、重复匹配
- {n} # 表达式重复n次 (/d{2})
- {m,n} # 表达式至少重复m次,最多重复n次
- {m,} # 表达式最少重复m次
- ? # 匹配表达式0次或1次
- + # 表达式至少出现1次
- * # 表达式出现0次或任意次
6、位置匹配
- ^ # 在字符串开始的地方匹配
- $ # 在字符串结束的地方匹配
- \b # 匹配一个单词边界,也就是单词和空格之间的位置
- \B # 匹配非边界单词
7、贪婪与非 贪婪模式
- 贪婪匹配 :在重复匹配时,正则表达式默认总是尽可能多的匹配 (.*)
- 非贪婪匹配 : 尽可能少的匹配 (.* ?)
8、 re 常用方法
- complile(pattern [ , flags= 0 ]) # 根据包含正则表达式的字符串创建模式对象 返回值 re 对象(flags 匹配模式)
- search (pattern, string [ , flags ]) # 在字符串中查找 对一个匹配到的对象,或None
- match (pattern, string [ , flags ]) # 在字符串开始处匹配模式
- split (pattern, string [ ,maxsplit = 0, flags ]) # 根据模式的 匹配项来分割字符串
- findall (pattern, string [ , flags ]) # 列出字符串中模式的所有匹配项
- sub(pat,repl,string[,count = 0,flags]) # 将字符串中所有的pat的匹配项用repl替换
9、re模块分组功能(对已经匹配的内容进行筛选出需要的内容)
实现分组用 (),获取的分组内容用 group()、groups()
match() 方法
# 不分组时情况
import re
origin = "hasdfi123123safd"
r = re.match("h\w+",origin)
print(r.group()) # 获取匹配的整体结果 —— hasdfi123123safd
print(r.groups()) # 获取模型中匹配到的分组结果元组 —— ()
# 分组时情况
import re
origin = "hasdfi123123safd"
r = re.match("h(\w+).*(?P<name>\d)$", origin) # .* 贪婪匹配 ?P<name>:分组的名称
print(r.group()) # 获取匹配到的整体结果
print(r.group(1)) # 获取匹配到的分组1的结果
print(r.group(2)) # 获取匹配到的分组2的结果
print(r.groups()) # 获取模型中匹配到的分组结果元组
#执⾏结果:
hasdfi123123safd123
asdfi123123safd12
3
('asdfi123123safd12', '3')
groups() # 将匹配到的结果放到元组中
print(r.groups()) # 获取匹配到的整体结果
#执⾏结果:
(asdfi123123safd12,3)
# search() 方法分组
import re
origin = "sdfi1ha23123safd123"
r = re.search("h(\w+).*(?p<name>\d)$",origin)
print(r.group())
print(r.group(0))
print(r.group(1))
print(r.group(2))
print(r.groups())
#执⾏结果:
ha23123safd123
ha23123safd123
a23123safd12
3
('a23123safd12', '3')
# findall() 方法
import re
origin = "has something have do"
# ⽆分组
r = re.findall("h\w+", origin)
print(r)
#执⾏结果:
['has', 'hing', 'have']
import re
origin = "has something have do"
# ⼀个分组
r = re.findall("h(\w+)", origin)
print(r)
#执⾏结果:
['as', 'ing', 'ave']
import re
origin = "hasabcd something haveabcd do" # 字符串调整了⼀下
# 两个分组
r = re.findall("h(\w+)a(bc)d", origin)
print(r)
#运⾏结果:
[('as', 'bc'), ('ave', 'bc')]
#split() 方法