Python正则表达式
来源:互联网 发布:fullpage.js css3动画 编辑:程序博客网 时间:2024/06/09 20:32
正则表达式是一个特殊的字符序列,检查一个字符串是否与某种模式匹配。
Python自1.5版本起,增加re模块,提供Perl风格的正则表达式模式。re模块使Python语言拥有全部的正则表达式功能。
compile函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。(不需要)
re模块也提供与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。
import re # 推荐使用from re import * # 不推荐使用from re import findall, search, sub, S # 不推荐使用
一、常用方法
1 re.match函数
1.1 描述
从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()则返回none。
1.2 语法
re.match(pattern, string, flags=0)
说明:匹配成功re.match方法返回一个匹配的对象,否则返回None。
1.3.1
#!/usr/bin/python# -*- coding: UTF-8 -*-import reprint(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配
输出:
(0, 3)
None
1.3.2
#!/usr/bin/pythonimport 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 dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
2 re.search方法
2.1 描述
匹配并提取第一个符合规律的内容,返回一个正则表达式对象object;
2.2 语法
re.search(pattern, string, flags=0)
说明:匹配成功re.search方法返回一个匹配的对象,否则返回None。
可以使用group(num) 或 group() 匹配对象函数来获取匹配表达式。
2.3.1
#!/usr/bin/python# -*- coding: UTF-8 -*-import reprint(re.search('www', 'www.runoob.com').span()) # 在起始位置匹配print(re.search('com', 'www.runoob.com').span()) # 不在起始位置匹配
输出:
(0, 3)
(11, 14)
2.3.2
#!/usr/bin/pythonimport reline = "Cats are smarter than dogs";searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)if searchObj: print "searchObj.group() : ", searchObj.group() # obj.group()的值是整个字符串 print "searchObj.group(1) : ", searchObj.group(1) # obj.group(1)的值是第一个匹配字符串,这里是(.*)匹配的字符串 print "searchObj.group(2) : ", searchObj.group(2) # obj.group(2)的值是第二个匹配字符串,这里是(.*?)匹配的字符串else: print "Nothing found!!"
输出:
searchObj.group() : Cats are smarter than dogs
searchObj.group(1) : Cats
searchObj.group(2) : smarter
2.4 re.match与re.search的区别
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;
re.search匹配整个字符串,直到找到一个匹配。
实例:
#!/usr/bin/pythonimport 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
3 检索和替换
3.1 描述
re.sub替换符合规律的内容,返回替换后的值;
3.2 语法
re.sub(pattern, repl, string, max=0)
返回的字符串是在字符串中用 RE 最左边不重复的匹配来替换。如果模式没有发现,字符将被没有改变地返回。
可选参数 count 是模式匹配后替换的最大次数;count 必须是非负整数。缺省值是 0 表示替换所有的匹配。
3.3 实例
举例1:
#!/usr/bin/pythonimport rephone = "2004-959-559 # This is Phone Number" # Delete Python-style commentsnum = re.sub(r'#.*$', "", phone)print "Phone Num : ", num # Remove anything other than digitsnum = re.sub(r'\D', "", phone) print "Phone Num : ", num
输出:
Phone Num : 2004-959-559
Phone Num : 2004959559
举例2:
#sub的使用举例s = '123rrrrr123'output = re.sub('123(.*?)123','123%d123'%789,s)print output # 输出:123789123
4 re.findall方法
4.1 描述
匹配所有符合规律的内容,返回包含结果的列表。
4.2 实例
举例1:
#对比findall与search的区别s2 = 'asdfxxIxx123xxlovexxdfd'f1 = re.search('xx(.*?)xx123xx(.*?)xx',s2).group()print f1 #输出:xxIxx123xxlovexxf2 = re.search('xx(.*?)xx123xx(.*?)xx',s2).group(1)print f2 #输出:If3 = re.search('xx(.*?)xx123xx(.*?)xx',s2).group(2)print f3 #输出:lovef2 = re.findall('xx(.*?)xx123xx(.*?)xx',s2)print f2 # 输出:[('I', 'love')]print f2[0] # 输出:('I', 'love')print f2[0][0] # 输出:Iprint f2[0][1] # 输出:love
二、正则表达式修饰符——可选标志
正则表达式可以包含一些可选标志修饰符来控制匹配的模式。
修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。
如 re.I | re.M 被设置成 I 和 M 标志:
举例:
# re.S匹配包含换行符的字符s = '''sdfxxhelloxxfsdfxxworldxxasdf'''d2=re.findall('xx(.*?)xx',s)print d2 # 输出:['fsdf']d1 = re.findall('xx(.*?)xx',s,re.S)print d1 #输出:['hello\n', 'world']
三、正则表达式模式
模式字符串使用特殊的语法来表示一个正则表达式:
字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。
多数字母和数字前加一个反斜杠时会拥有不同的含义。
标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。
反斜杠本身需要使用反斜杠转义。
由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r'/t',等价于'//t')匹配相应的特殊字符。
下表列出了正则表达式模式语法中的特殊元素。如果使用模式的同时提供可选的标志参数,某些模式元素的含义会改变。
.
匹配任意字符,换行符\n除外*
匹配前一个字符0次或无限次?
匹配前一个字符0次或1次.*
贪心算法(提取最多的内容).*?
非贪心算法(少量多餐)()括号内的数据作为结果返回
举例1:
#-*-coding:utf8-*-# 导入re库文件import re# . 的使用举例a = 'xy123'b = re.findall('x..',a)print b # 输出:['xy1']# * 的使用举例a = 'xxyxy123'b = re.findall('x*',a)print b # 输出:['xx', '', 'x', '', '', '', '', '']# ? 的使用举例a = 'xyxx123'b = re.findall('x?',a)print b # 输出:['x', '', 'x', 'x', '', '', '', '']
举例2:
# .* 的使用举例b = re.findall('xx.*xx',secret_code)print b # 输出:['xxIxxfasdjifja134xxlovexx23345sdfxxyouxx']# .*? 的使用举例c = re.findall('xx.*?xx',secret_code)print c # 输出:['xxIxx', 'xxlovexx', 'xxyouxx']
举例3:
# 使用括号与不使用括号的差别d1 = re.findall('xx.*?xx',secret_code)print d1 # 输出:['xxIxx', 'xxlovexx', 'xxyouxx']d2 = re.findall('xx(.*?)xx',secret_code)print d2 # 输出:['I', 'love', 'you']
四、正则表达式实例
1 字符匹配
2 字符类
3 特殊字符类
- python正则表达式学习
- c++正则表达式,python
- Python正则表达式(一)
- python的正则表达式
- Python正则表达式
- Python初学-正则表达式
- 正则表达式与python
- python正则表达式学习
- python正则表达式学习
- python正则表达式学习
- python正则表达式
- Python - 正则表达式
- Python正则表达式
- python正则表达式
- Python正则表达式指南
- Python正则表达式指南
- Python 正则表达式指南
- python 正则表达式
- Arduino IDE for ESP8266
- JSR 133 in Public Review Blog
- 把数据库数据 导入CSV 工具类
- order是mysql的关键字,不能用order作为表名
- 详解苹果的黑魔法 - KVO 的奥秘
- Python正则表达式
- flex4报错2032
- [Elasticsearch] 全文搜索
- 火狐浏览器设置早期的Adobe Flash配置
- 常用的设计模式
- laravel(3) blade模板和布局
- 问题描述:ADB not responding. You can wait more,or kill“abd.exe” process manually and click 'Restart'
- Git创建标签
- ado.net 学习小结