==详细正则表达式字符请参考,博文《正则表达式字符说明》==
re模块用法
import re
re.findall("正则语句","字符串")
基本元字符
释义
.
匹配任意字符
^
匹配开头字符
$
匹配结束字符
*
匹配前一个字符0到无限次
+
匹配前一个字符1到无限次
?
匹配前一个字符0到1次
?:
取消匹配优先级
()
匹配元字符分组
{}
匹配前一个字符指定的次数
[]
字符集,字符集中"[-]"表示范围,"[\]"表示转义"[^]"表示取反
|
或匹配
==注意:多字符匹配【贪婪匹配】转变为惰性匹配在匹配后加"?"==
特殊元字符
释义
类表示方式
\d
匹配任何十进制数字
[0-9]
\D
匹配任何非数字字符
[^0-9]
\s
匹配任何空白字符
[\t\n\r\f\v]
\S
匹配任何非空白字符
[^\t\n\r\f\v]
\w
匹配任何字母或数字字符
[a-zA-Z0-9_]
\W
匹配任何非字母或数字字符
[^a-zA-Z0-9_]
\b
匹配一个特殊字符便捷,比如空格,&,#等
普通匹配示例
#-*- coding:utf8 -*-
import re
txt = "(abcabcabc)"
a = re.findall("(abc)",txt)
print(a)
b = re.findall("(abc)+",txt)
print(b)
c = re.findall("(?:abc)+",txt)
print(c)
d = re.search("(abc)",txt)
print((d).group())
['abc', 'abc', 'abc']
['abc']
['abcabcabc']
abc
re模块方法
re.findall()
查找所有符合条件的字符,返回的是列表
# -*- coding:utf8 -*-
import re
txt = ("abcabcabc")
a = re.findall("(abc)",txt) #条件匹配
print(a) #打印返回值
['bc', 'bc']
re.finditer()
查找所有符合条件的字符,返回的是迭代器对象
#-*- coding:utf8 -*-
import re
txt = ("abcabcabc")
a = re.finditer("(abc)",txt) #条件匹配
print(a) #打印返回值为迭代器对象
print(a.__next__()) #返回的对象
print((a.__next__()).group()) #返回的对象的值
abc
re.search()
搜索符合条件的第一个字符,返回的是对象
# -*- coding:utf8 -*-
import re
txt = ("abcabcabc")
b = re.search(("abc"),txt) #条件匹配
print(b) #返回的对象
print(b.group()) #返回对象对应的值
<_sre.sre_match object span="(1," match="bc"> #返回的对象
bc #返回的对象对应的值
分组示例
# -*- coding:utf8 -*-
import re
txt = ("abc123bbc456ddc678")
c = re.search("bc[0-9]+",txt).group() #搜索并打印字母加数字
print(c)
d = re.search("(?Pbc)[0-9]+",txt).group("name") #将字母和数字分开做分组处理并只打印分组部分
print(d)
bc123 #未分组显示结果
bc #分组后显示分组结果
re.match()
只会从开始匹配
示例
# -*- coding:utf8 -*-
import re
txt = ("abc123bbc456ddc678")
print(re.match("123",txt)) #只匹配开头不符合匹配规则返回空
print(re.match("\w*",txt)) #返回匹配结果对象
print(re.match("\w*",txt).group()) #输出返回结果对象对应的值
None #匹配不到返回的结果
<_sre.sre_match object span="(0," match="abc123bbc456ddc678"> #返回的对象
abc123bbc456ddc678 #返回对象的值
re.split()
分割匹配
import re
txt = ("小明:74分|小刚:68分|小花:90分|小莉:85分")
print(re.split("\|",txt))
['小明:74分', '小刚:68分', '小花:90分', '小莉:85分']
re.sub()
匹配替换
#-*- coding:utf8 -*-
import re
txt = ("小明:74分|小刚:68分|小花:90分|小莉:85分")
print(re.sub("小","大",txt)) #匹配并替换
print(re.sub("\d+","未知",txt)) #匹配并替换
print(re.sub("\d+","未知",txt,2)) #匹配前两次
大明:74分|大刚:68分|大花:90分|大莉:85分
小明:未知分|小刚:未知分|小花:未知分|小莉:未知分
小明:未知分|小刚:未知分|小花:90分|小莉:85分
re.subn()
匹配替换,显示匹配替换的次数,返回元组
#-*- coding:utf8 -*-
import re
txt = ("小明:74分|小刚:68分|小花:90分|小莉:85分")
print(re.subn("小","大",txt)) #匹配并替换
('大明:74分|大刚:68分|大花:90分|大莉:85分', 4)
re.compile()
自定义规则
规则名称:re.compile(匹配内容)
示例
#-*- coding:utf8 -*-
import re
txt = "awdfwf23423bgre5345"
test = re.compile("\d+")
print(test.findall(txt))
['23423', '5345']