import re
常见方法:
compile: # 编译
sub: # 替换
match: # 匹配,从头匹配数据
search: # 查找,只返回与之相匹配的第一个数据
findall: # 查找所有,以列表的形式返回所有数据
finditer: # 查找所有,以迭代器的形式返回所有数据
split: # 切割数据
正则表达式的一元字符:
.(点) #该符号 点 匹配所有符号,除了换行符(\n)
\w #匹配有效符号 (即 [ A-Za-z0-9_ ] 与各国常用语言符号)
[ A-Za-z0-9_ ] #匹配有效符号,与\w不同的是不包含初英文外的语言符号
\d #匹配数字
\s #匹配空白位(空格、\t制表符)
[abcdef] #匹配中括号中的某一个符号(列举):
[a-z] #中括号中若出现 - 表示一个闭区间,即小写字母a到小写字母z
^xx # 表示以什么什么开头
xx$ # 表示以什么什么结尾
eg: 该正则表达式表示:匹配以1开头第二个数字只能是3-9中的任意一个,之后为任意位数的数字,最后以数字6结尾的整个字符串
反义符:
\W # 匹配特殊符号
\D # 非数字
\S # 非空白位
[^xxxx] # 不能与中括号中的某个符号匹配
注意:[^xxxx]和^[xxxx]的区别:
[^xxxx]表示:不能与中括号中的某一个符号匹配(此处的 ^ 表示逻辑运算符 非 的意思)
^[xxxx]表示:以中括号中的某一个符号开始,匹配 (此处的^表示正则表达式中的一元字符)
转义符:
在正则表达式中,如果需要原样匹配正则符号时,可以使用转义符,表示符号的原有含义
. \.
\w \\w
注意:在python,字符串本身对应\符号有特殊含义,而正则表达式也对弈\有特殊含义
如果需要正则中原样匹配一个 \ 符号,需要使用\\\\来做转义
如果不想写四个反斜杠来表示一个反斜杠,也可以使用python提供的特殊写法:
r"正则表示" # 此时只需写两个 \\ 来表示 \ 的原意
注意:建议以后所有的正则表达式,都在最前面加上r"正则表示"
重复问题:
* # 匹配任意次(0到多次)
+ # 匹配1到多次
? # 0次或者1次
{m} # 准确匹配m位
{m,} # 至少m位
{m,n} # 匹配的次数就是[m,n]闭区间
分组:
分组:是指在正则表示中,将匹配中的内容再次筛选!
# 正则表达 "<\w+>(\w+)(</\w+>)" ,第0组内容为与正则表达式匹配的内容
# 第一组内容为 第一个括号内,即\w+的内容 即为 ‘这个就是你想要的内容’
# 第二组内容为 第二个括号内,即</\w+>的内容 即为 ‘</html> ’
content = re.search("<\w+>(\w+)</\w+>","<html>这个就是你想要的内容</html>")
content.group() # 输出内容:<html>这个就是你想要的内容</html>
content.group(1) # 输出内容:这个就是你想要的内容
content.group(2) # 输出内容:</html>
贪婪与懒惰(非贪婪):
贪婪模式:正则表达式在匹配时,会尽可能多的匹配
非贪婪模式:正则表达式在匹配时,会尽可能少的匹配
如何将默认的贪婪模式转换为非贪婪模式:
只需在多位操作前加一个 ? 即可完成模式转换!
针对的多位操作如下:
* # 匹配任意次(0到多次)
+ # 匹配1到多次
? # 0次或者1次
{m,} # 至少m位
{m,n} # 匹配的次数就是[m,n]闭区间
实例
贪婪模式:会匹配最长的以开始位置开始,以结束位置结束的字符串;
懒惰模式:匹配尽可能少的字符
贪婪模式 正则表达式 <div>.*<\/div> 图一为匹配结果
懒惰模式 正则表达式 <div>.*?<\/div> 图二为匹配结果
图一:
图二: