之前的文章:
正则字符集
# 字符集 \w 匹配字母数字及下划线 \W 匹配非字母数字及下划线 \s 匹配任意空白字符,等价于[\n\t\r\f] \S 匹配任意非空字符 \d 匹配任意数字,等价于[0-9] \D 匹配任意非数字 \A 匹配字符串开始 \Z 匹配字符串结束,如果是换行,只匹配到换行前的结束字符串 \z 匹配字符串结束 \G 匹配最后匹配完成的位置 \n 匹配一个换行符 \t 匹配一个制表符 [...] 匹配一组字符,单独列出,[abc]匹配a,b或c [^...] 匹配不在其中的字符 # 数量控制 a|b 匹配a或b ^ 匹配字符串的开头 $ 匹配字符串的末尾 . 匹配任意字符,除了换行符, 指定re.DOTALL 匹配包括换行符的任意字符 * 零个或多个表达式 + 一个或多个表达式 ? 零个或一个表达式,非贪婪匹配 {n} 匹配n个表达式 {n, m}匹配n~m次表达式,贪婪匹配 () 匹配括号内的表达式,表示组
代码实例
import re # match从头开始匹配 # 常规匹配 content = "fsadf5666asd" ret = re.match("\w+", content) print(len(content)) print(ret) print(ret.group()) print(ret.span()) """ 12 <_sre.SRE_Match object; span=(0, 12), match='fsadf5666asd'> fsadf5666asd (0, 12) """ # 泛匹配 ret = re.match(".*", content) print(ret) # <_sre.SRE_Match object; span=(0, 8), match='fsadfasd'> # 目标匹配 ret = re.match("[a-z]+(\d+)", content) print(ret) print(ret.group()) print(ret.group(0)) print(ret.group(1)) """ <_sre.SRE_Match object; span=(0, 9), match='fsadf5666'> fsadf5666 fsadf5666 5666 """ # 贪婪匹配 ret = re.match(".*(\d+)", content) print(ret) print(ret.group(0)) print(ret.group(1)) """ <_sre.SRE_Match object; span=(0, 9), match='fsadf5666'> fsadf5666 6 """ # 非贪婪匹配 ret = re.match(".*?(\d+)", content) print(ret) print(ret.group(0)) print(ret.group(1)) """ <_sre.SRE_Match object; span=(0, 9), match='fsadf5666'> fsadf5666 5666 """ # 匹配模式 content = """sadfasd34345sdfa sdfasdf""" # 匹配换行符 ret = re.match(".*?(\d+).*", content, re.S) print(ret) print(ret.group(1)) """ <_sre.SRE_Match object; span=(0, 24), match='sadfasd34345sdfa\nsdfasdf'> 34345 """ # 转义 content = "sdfasdf$55.334" # 匹配换行符 ret = re.match(".*?(\$\d+\.\d+)", content, re.S) print(ret) print(ret.group(1)) """ <_sre.SRE_Match object; span=(0, 14), match='sdfasdf$55.334'> $55.334 """ # 总结: # 尽量使用泛匹配,使用括号得到匹配目标, # 尽量使用非贪婪模式,有换行符就用re.S # search扫描整个字符串 # 能用search就不用match content = "fsadf5666asd" ret = re.match("\d+", content) print(ret) ret = re.search("\d+", content) print(ret) """ None <_sre.SRE_Match object; span=(5, 9), match='5666'> """ # findall 找到所有 content = "fsadf5666asd234" ret = re.findall("\d+", content) print(ret) # ['5666', '234'] # sub 替换字符串 content = "fsadf5666asd234" ret = re.sub("\d+", "", content) print(ret) # fsadfasd # compile 编译成正则对象,便于复用 content = "fsadf5666asd234" pattern = re.compile("\d+") ret = pattern.findall(content) print(ret) # ['5666', '234']
r''
一般用在正则表达式中,称为原始字符串,
作用
将Python语法中的反斜杠转义给取消,将其设置成为一个普通的字符串