re 模块::正则匹配 ,使用re模块实现
1、什么是正则表达式
正则表达式是一种对字符和特殊字符操作的逻辑公司,从特定的字符中,用正则表达字符来过滤的逻辑
2、正则表达式作用
(1)快速高效的查找和分析字符,也叫模式匹配:具有查找,匹配,替换,插入,添加,删除等能力
(2)实现一个编译查找,一般在日志处理文件时用的多
3、正则表达方式:
(1)正则表达式是一种文本模式
(2)帮助我们检查字符是否与某种模式匹配
(3)re模块使python语言拥有全部的真正表达式功能,从python1.5版本起
========================================================================
认识正则表达式中特殊字符:
re模块数量词匹配:
预定义字符集匹配:
\d:数字0-9
\D:非数字
\s:空白字符
\n:换行符
\w 匹配字母数字
\W 匹配非字母数字
^:表示的匹配字符以什么开头
$:表示的匹配字符以什么结尾
:匹配前面的字符0次或n次 eg:ab (* 能匹配a 匹配ab 匹配abb )
+:匹配+前面的字符1次或n次
?:匹配?前面的字符0次或1次
{m}:匹配前一个字符m次
{m,n}:匹配前一个字符m到n次(包括n次),m或n可以省略,mn都是
#1、findall # 从第一个字符开始查找,找到全部相关匹配为止,找不到返回一个空列表[] #
2、compile # 编译模式生成对象,找到全部相关匹配为止,找不到返回一个列表[]
#3、match
#从第一个字符开始匹配,如果第一个字符不是要匹配的类型、则匹配失败并报错
注意:如果规则带了’+’,则匹配1次或者多次,无’+'只匹配一次
4、search
#从第一个字符开始查找、一找到就返回第一个字符串,找到就不往下找,找不到则报错
===========================
实战:
导入re模块
import re
(1)findall
#第一个字符开始查找,找到全部相关匹配为止,找不到返回列表
以上结果:以列表的格式输出
#findall
import re
a=“abcdefadddddddg”
b=re.findall(“d”,a)
print(" ".join(b))
(2)match
从第一个字符开始匹配,如果第一个字符不是要匹配的类型、则匹配失败并报错
import re
match匹配是a开头的字符场景
a=“abcdefadddddddg”
b=re.match(“a”,a)
print(b)
#match匹配是不是a开头的字符场景
import re
a=“abcdefadddddddg”
b=re.match(“b”,a)
print(b)
(3)search 匹配第一个
从第一个字符开始查找、一找到就返回第一个字符串,找到就不往下找,找不到则none
import re
a=“abcdefaddddcdddg”
b=re.search(“c”,a)
print(b)
(4)fullmath 完整匹配一个整体字符
(5)compile
ompile # 编译模式生成对象,找到全部相关匹配为止,找不到返回一个列表[]
如果不是整体,则返回none值
======================================================
场景一: \d 表示0-9的数字
import re
a=“1abcd2efadd2ddcdddg”
b=re.findall("\d",a)
print(b)
场景二:\D
import re
a=“1abcd2efadd2ddcdddg”
b=re.findall("\D",a)
print(’’.join(b))
场景三:\s 空白字符
场景四:\n 匹配一个换行符
场景4: ^ 匹配字符串的开头
4.1匹配是字符开头
4.2匹配不是字符开头
场景5:$ 匹配字符串的末尾
场景6: * 匹配0个或多个表达式 (匹配前面这个字符0次或多次)
import re
a=“abcd2eafabc”
b=re.findall(“ab*”,a)
print(b) # 结果[‘ab’, ‘a’, ‘ab’]
场景7: + 匹配1个或多个表达式
结果:[‘ab’, ‘ab’, ‘abbbbb’]
场景8:?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
场景9:{m} 匹配前一个字符m次
import re
a=“abcd2eafabcbaaaaaabbbbb”
b=re.search(“a{4}”,a).group()
print(b)
场景10:{m,n} 匹配前一个字符m到n次, 包括n次,
备注:{ } 限制出现的次数
{n} 匹配前面紧跟字符精确到n次
{n,} 匹配前面紧跟字符最少n次
{n,m} 匹配前面紧跟字符最少n次,最多m次
=====================================
(1)group 方法
(2)span方法
#span()方法
import re
a=“123abdf”
b=re.search(“ab”,a)
print(b) # <re.Match object; span=(3, 5), match=‘ab’> #只能得到索引位
print(b.span()) #具体的索引位
group方法
import re
a=“123abdf”
b=re.search(“ab”,a)
print(b) # <re.Match object; span=(3, 5), match=‘ab’> #只能得到索引位
print(b.group()) #具体的字符
========================================
标志匹配符:
re.I 忽略大小写(常用)
#re.L 做本地化识别(locale-aware)匹配(少用)
re.M 多行匹配,能匹配到换行\n,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
#re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予更灵活的格式,以便将正则表达式写得更易于理解。
. 表示任意字符,除了换行
(1)re.I
import re
#(1)未使用标志匹配符
#m = re.findall(“m”, “324faMfae\n54321432”)
print(m) #结果[]
#(2)使用标志匹配符
m= re.findall(“m” ,“324fafaM54321432”,flags=re.I)
print(m) # [‘M’]
(2)re.s
import re
#(1)未使用标志匹配符
m = re.findall(“m.*5”, “324mfafae\n54321432”)
print(m) #结果[]
#(2)使用标志匹配符
#m = re.search(“m.*5”, “324mfafae\n54321432”, flags=re.S)
===================================================
sub 方法
s = “1fdsafa32gdfs4g”
r = re.sub("\D", “我”, s)
print® #我fdsafa我我gdfs我g