Python3 正则表达式正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。 re 模块使 Python 语言拥有全部的正则表达式功能。 compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。 re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。 本章节主要介绍Python中常用的正则表达式处理函数。 re.match函数re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。 函数语法: re.match(pattern, string, flags=0) 函数参数说明:
匹配成功re.match方法返回一个匹配的对象,否则返回None。 我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
实例 1: #!/usr/bin/python# -*- coding: UTF-8 -*- import reprint(re.match('www', 'm.runoob.com').span()) # 在起始位置匹配print(re.match('com', 'm.runoob.com')) # 不在起始位置匹配 以上实例运行输出结果为: (0, 3)None 实例 2: #!/usr/bin/python3import reline = 'Cats are smarter than dogs'matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)if matchObj: print ('matchObj.group() : ', matchObj.group()) print ('matchObj.group(1) : ', matchObj.group(1)) print ('matchObj.group(2) : ', matchObj.group(2))else: print ('No match!!') 以上实例执行结果如下: matchObj.group() : Cats are smarter than dogsmatchObj.group(1) : CatsmatchObj.group(2) : smarter re.search方法re.search 扫描整个字符串并返回第一个成功的匹配。 函数语法: re.search(pattern, string, flags=0) 函数参数说明:
匹配成功re.search方法返回一个匹配的对象,否则返回None。 我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
实例 1: #!/usr/bin/python3import reprint(re.search('www', 'm.runoob.com').span()) # 在起始位置匹配print(re.search('com', 'm.runoob.com').span()) # 不在起始位置匹配 以上实例运行输出结果为: (0, 3)(11, 14) 实例 2: #!/usr/bin/python3import reline = 'Cats are smarter than dogs';searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)if searchObj: print ('searchObj.group() : ', searchObj.group()) print ('searchObj.group(1) : ', searchObj.group(1)) print ('searchObj.group(2) : ', searchObj.group(2))else: print ('Nothing found!!') 以上实例执行结果如下:searchObj.group() : Cats are smarter than dogssearchObj.group(1) : CatssearchObj.group(2) : smarter re.match与re.search的区别re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。 实例: #!/usr/bin/python3import reline = 'Cats are smarter than dogs';matchObj = re.match( r'dogs', line, re.M|re.I)if matchObj: print ('match --> matchObj.group() : ', matchObj.group())else: print ('No match!!')matchObj = re.search( r'dogs', line, re.M|re.I)if matchObj: print ('search --> matchObj.group() : ', matchObj.group())else: print ('No match!!') 以上实例运行结果如下:No match!!search --> matchObj.group() : dogs 检索和替换Python 的re模块提供了re.sub用于替换字符串中的匹配项。 语法: re.sub(pattern, repl, string, count=0) 返回的字符串是在字符串中用 RE 最左边不重复的匹配来替换。如果模式没有发现,字符将被没有改变地返回。 可选参数 count 是模式匹配后替换的最大次数;count 必须是非负整数。缺省值是 0 表示替换所有的匹配。 实例: #!/usr/bin/python3import rephone = '2004-959-559 # 这是一个电话号码'# 删除注释num = re.sub(r'#.*$', '', phone)print ('电话号码 : ', num)# 移除非数字的内容num = re.sub(r'\D', '', phone)print ('电话号码 : ', num) 以上实例执行结果如下:电话号码 : 2004-959-559 电话号码 : 2004959559 正则表达式修饰符 - 可选标志正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志:
正则表达式模式模式字符串使用特殊的语法来表示一个正则表达式: 字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。 多数字母和数字前加一个反斜杠时会拥有不同的含义。 标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。 反斜杠本身需要使用反斜杠转义。 由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r'/t',等价于'//t')匹配相应的特殊字符。 下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。
正则表达式实例字符匹配
字符类
特殊字符类
|
|
来自: 丁麻子 > 《python3基础教程》