前言
Re库是Python的标准库,主要用于字符串匹配,调用方式:import re
一、正则表达式的常用操作符
. 表示任何单个字符 [] 字符集,[abc],[a-z]这种形式 [^ ] 非字符集,对单个字符给出排除范围,[^abc]表示非a或b或c的单个字符。 * 前一个字符0次或者是无限次扩展 ? 前一个字符0次或者是1次扩展 | 左右表达式任意一个 {m} 扩展前一个字符m次 {m, n} 扩展前一个字符m到n次 ^ 匹配字符串的开头 $ 匹配字符串的结尾 \d 数字,等价于[0-9] \w 单词字符,等价于[A-Za-z0-9_]
二、主要函数介绍以及使用
如果想要了解Match对象的相关属性可以先看三。
Re库默认采用贪婪匹配,即输出匹配最长的子串
2-1、re.search()
# define: 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象 # form: re.search(pattern, string, flags=0) # pattern: 正则表达式的字符串或原生字符串表示 # string: 待匹配的字符串 # flags: 正则表达式使用时的控制标记 # 参数同上 # eg >>>import re >>>re.search(r'[1-9]\d{5}', 'BIT 100081') >>>if match: >>> match.group(0) >10081
2-2、re.match()
# define: 从一个字符串的开始位置起匹配正则表达式,返回match对象 # notice:如果开始没有匹配到,不管后边有没有能符合匹配的,都打印不出结果,这是和search的区别。 # 参数同上 # form: >>>import re >>>re.match(r'[1-9]\d{5}', 'BIT 100081') >>>if match: >>> match.group(0) >报错
2-3、re.findall()
# define:搜索字符串,以列表类型返回全部能匹配的子串 # 参数同上 # form: >>>import re >>>al = re.findall(r'[1-9]\d{5}', 'BIT 100081 AS100083') >>>al >['100081', '100083']
2-4、re.split()
# define:将一个字符串按照正则表达式匹配结果进行分隔,返回列表类型 # 除了上边的参数,maxsplit:最大分隔数,剩余部分作为最后一个元素输出 # form: >>>import re >>>al = re.split(r'[1-9]\d{5}', 'BIT 100081 AS100083') >['Bit', ' TSU', '']
2-5、re.finditer()
# define:搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象 # 类似于fianall,只不过返回的是迭代对象 # form: >>>import re >>>for m in re.finditer(r'[1-9]\d{5}', 'BIT 100081 AS100083') >>> if m: >>> print(m.group(0)) >100081 >100083
2-6、re.sub()
# define:在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串。 # form: re.sub(pattern, repl, string, count=0, flags=0) # pattern: 正则表达式的字符串或原生字符串表示 # repl: 把匹配到的字符串替换成什么 # string: 待匹配的字符串 # flags: 正则表达式使用时的控制标记 # form: >>>import re >>>re,sub(r'[1-9]\d{5}', ':zipcode', 'BIT100081 TSU100084') >'BIT:zipcode TSU:zipcode' # 删除所有的表情字符 >>> re.sub('[^\u4e00-\u9fa5^]', '')
2-7、另一种用法
# re.compile: 将正则表达式的字符串形式编译成正则表达式对象 re.search(r'[1-9]\d{5}', 'BIT 100081') 等价于 pat = re.compile(r'[1-9]\d{5}') pat.search('Bit 100081')
三、Match对象的相关属性
属性 # string: 待匹配的文本 # re: 匹配时使用的正则表达式 # pos: 正则表达式搜索文本的开始位置 # endpos: 正则表达式搜索文本的结束位置 # group(0): 获得匹配后的字符串 # start(): 匹配字符串在原始字符串的开始位置 # end(): 匹配字符串在原始字符串的结束位置 # span(): 返回start(), end() >>>import re >>>m = re.search(r'[1-9]\d{5}', 'BIT 100081') >>>m.string >'BIT 100081' >>>m.re >re.compile('[1-9]\\d{5}') >>>m.pos >0 >>>m.endpos >19 >>>m.group(0) >'100081' >>>m.start() >3 >>>m.end() >9 >>>m.span() >(3, 9)
四、注意事项
1 re库采用raw string类型(原生字符串类型,不需要对转义符再次转移)。 即r'text' 2 re库若采用string类型表示正则表达式,则需要转义。
五、实例
5-1、以某字符开头以某字符结尾(截取字符串中的)
# 截取以k开头以d结尾的字符串。 re.search('k.*?d', str)
参考文章: