==详细正则表达式字符请参考,博文《正则表达式字符说明》==
re模块用法
import rere.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 retxt = "(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 retxt = ("abcabcabc")a = re.findall("(abc)",txt) #条件匹配print(a) #打印返回值
['bc', 'bc']
re.finditer()
查找所有符合条件的字符,返回的是迭代器对象
#-*- coding:utf8 -*-import retxt = ("abcabcabc")a = re.finditer("(abc)",txt) #条件匹配print(a) #打印返回值为迭代器对象print(a.__next__()) #返回的对象print((a.__next__()).group()) #返回的对象的值
abc
re.search()
搜索符合条件的第一个字符,返回的是对象
# -*- coding:utf8 -*-import retxt = ("abcabcabc")b = re.search(("abc"),txt) #条件匹配print(b) #返回的对象print(b.group()) #返回对象对应的值
<_sre.SRE_Match object; span=(1, 3), match='bc'> #返回的对象bc #返回的对象对应的值
分组示例
# -*- coding:utf8 -*-import retxt = ("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 retxt = ("abc123bbc456ddc678")print(re.match("123",txt)) #只匹配开头不符合匹配规则返回空print(re.match("\w*",txt)) #返回匹配结果对象print(re.match("\w*",txt).group()) #输出返回结果对象对应的值
None #匹配不到返回的结果<_sre.SRE_Match object; span=(0, 18), match='abc123bbc456ddc678'> #返回的对象abc123bbc456ddc678 #返回对象的值
re.split()
分割匹配
import retxt = ("小明:74分|小刚:68分|小花:90分|小莉:85分")print(re.split("\|",txt))
['小明:74分', '小刚:68分', '小花:90分', '小莉:85分']
re.sub()
匹配替换
#-*- coding:utf8 -*-import retxt = ("小明: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 retxt = ("小明:74分|小刚:68分|小花:90分|小莉:85分")print(re.subn("小","大",txt)) #匹配并替换
('大明:74分|大刚:68分|大花:90分|大莉:85分', 4)
re.compile()
自定义规则
规则名称:re.compile(匹配内容)
示例
#-*- coding:utf8 -*-import retxt = "awdfwf23423bgre5345"test = re.compile("\d+")print(test.findall(txt))
['23423', '5345']