python字符串及正则表达式[转]
原文链接:http://www.cnblogs.com/guojidong/archive/2012/12/20/2826388.html
字符串:
正则表达式
正则表达式元字符与语法图:

注意事项:
正则表达式的嵌套需要使用“()”,例如(\d\d\d){2}代表的是六个数字\d\d\d{2}代表的是4个数字。
正则表达式每个分组会自动拥有一个组号,从左向右分别表示为\1,\2…例如(abc)\1代表匹配abc两次。
三种间隔符号——“^”(代表匹配字符串首部子串),“$”(代表匹配结束部分的子串),“\b”(分隔单词)
findall() sub() subn()创建副本,不改变原字符串
sys.re模块使用:
findall(pattern,string,flags = 0); 搜索string,以列表形式返回全部能匹配的子串,例子:
s = "HELLO WORLD"
print re.findall(r"^hello",s)
print re.findall(r"^hello",s,re.I)
print re.findall("WORLD$",s)
print re.findall(r"wORLD$",s,re.I)
print re.findall(r"\b\w+\b",s)
sub(pattern,repl,string,count = 0);使用repl替换string中每一个匹配的子串后返回替换后的字符串。 当repl是一个字符串时,可以使用\id或\g<id>、\g<name>引用分组,但不能使用编号0。 当repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。 count用于指定最多替换次数,不指定时全部替换。subn(pattern,repl,string,count = 0); 返回 (sub(repl, string[, count]), 替换次数)。例子:
s = "hello world"
print re.sub("hello","hi",s) #不改变原字符串
print re.sub("hello","hi",s[-4:])
print re.sub("world","China",s[-5:])
s = '你好 WORLD2'
print "匹配字母数字:" + re.sub(r"\w",'hi',s)
print "替换次数:" + str(re.subn(r"\w",'hi',s)[1])
print "匹配非字母数字:" + re.sub(r"\W",'hi',s) #这里一个汉字是两个字符
print "替换次数:" + str(re.subn(r"\W",'hi',s)[1])
print "匹配空白字符:" + re.sub(r"\s",'hi',s)
print "匹配数字字符:" + re.sub(r"\d",'hi',s)
print "匹配任意字符:" + re.sub(r".",'hi',s)
re模块规则选项:
- re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
- M(MULTILINE): 多行模式,改变'^'和'$'的行为(参见上图)
- S(DOTALL): 点任意匹配模式,改变'.'的行为
- L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
- U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
- X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。
pattern对象的使用:
1 正则表达式的解析十分费时,若多次使用findall等函数进行匹配可能会降低效率,若多次使用同一规则匹配字符串,可以使用compile()函数进行预编译,compile()函数返回pattern对象,示例如下:
s = "1ab23bv456"
p = re.compile(r"\d+")
print p.findall(s);
print p.pattern
2 函数compile()通常和match(),search(),group()一起使用,对含有分组的正则表达式进行解析。含分组的表达式从左向右计数,第一个圆括号出现的是第一组,以此类推,但是0号组表示用于匹配整个正则表达式的结果。match()和search()方法返回match对象,match对象提供了一系列的方法和属性来管理匹配的结果。
p = re.compile(r"(abc)\1")
m = p.match("abcabcabc")
print m.group(0)
print m.group(1)
print m.group()
p = re.compile(r"(?P<one>abc)(?P=one)")
m = p.search('abcabcabc')
print m.group('one')
print m.groupdict().keys()
print m.groupdict().values()
print m.re.pattern
python字符串及正则表达式[转]的更多相关文章
- Python字符串和正则表达式中的反斜杠('\')问题
在Python普通字符串中 在Python中,我们用'\'来转义某些普通字符,使其成为特殊字符,比如 In [1]: print('abc\ndef') # '\n'具有换行的作用 abc defg ...
- [Python学习笔记][第四章Python字符串]
2016/1/28学习内容 第四章 Python字符串与正则表达式之字符串 编码规则 UTF-8 以1个字节表示英语字符(兼容ASCII),以3个字节表示中文及其他语言,UTF-8对全世界所有国家需要 ...
- python的正则表达式 re-------可以在字符串前加上 r 这个前缀来避免部分疑惑,因为 r 开头的python字符串是 raw 字符串,所以里面的所有字符都不会被转义
正则表达式使用反斜杆(\)来转义特殊字符,使其可以匹配字符本身,而不是指定其他特殊的含义.这可能会和python字面意义上的字符串转义相冲突,这也许有些令人费解.比如,要匹配一个反斜杆本身,你也许要用 ...
- python字符串转义与正则表达式特殊字符转义
最近在自学python,字符串和正则表达式的特殊字符转义有点混淆,做个笔记简单总结一下. 1.普通字符串转义 在字符串中使用特殊字符时,要用反斜杠(\)转义字符.例如:'Let\'s go!',这里对 ...
- Python高手之路【五】python基础之正则表达式
下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...
- python基础之正则表达式
正则表达式语法 正则表达式 (或 RE) 指定一组字符串匹配它;在此模块中的功能让您检查一下,如果一个特定的字符串匹配给定的正则表达式 (或给定的正则表达式匹配特定的字符串,可归结为同一件事). 正则 ...
- python之(re)正则表达式上
python正则表达式知识预备 正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突,因此,Python用" \\\\ "表 ...
- Python::re 模块 -- 在Python中使用正则表达式
前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...
- python的re正则表达式模块学习
python中re模块的用法 Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析.复杂字符串分析和信息提取时是一个非常有用的工 ...
随机推荐
- iOS关于应用内分享
iOS7.0增加了AirDrop功能,可知在未来,手机信息资源的直接分享会越来越重要.而我们在iPhone系统短信点击照片会看到右上角的分享按钮,点击可以弹出一系列的应用菜单,允许用户把这张图片分享到 ...
- ul和li实现分两列(多列)布局显示
简单语句实现DIV+CSS分两列(多列)布局显示 <style type="text/css"> .my ul { width: 210px; } .my li { w ...
- RTB撕开黑盒子 Part 1: Datacratic's RTB Algorithms
这篇文章是讨论Datacratic所用的统计和经济理论的一些内容.我们开发了real time bidding算法s.为了实现广告主的目标,我们的算法自动地利用其它广告主的次优策略,并再查看广告的底价 ...
- 用Winrar批量解压缩有密码文件方法,只需输入一次密码
老王上传的文件多是RAR压缩格式的, 每个系列下载完,都20多集,解压缩的时候要一个一个的输入密码,太浪费时间. 1) 把下载的需要解压缩的文件统一放到一个文件夹下. 2) 启动winrar程序 (从 ...
- 把虚拟机中的Linux系统安装到U盘中
[小技巧] 把虚拟机中的Linux系统安装到U盘中 出于各种需求,很多用户可能经常会在Windows系统中安装虚拟机,然后在虚拟机中安装Linux系统.使用虚拟机的优点是可以同时使用多个系统,而缺点也 ...
- 为outlook增加“邮件召回”功能
outlook 2007开始软件自带邮件召回功能.2003版本没有,可惜此版本盗版最厉害,用户很广,这次项目中用户分布很广,其中outlook2003版本用户数甚多,达到397人. 不可能让他们新装2 ...
- Nginx之旅系列 - Nginx的configuration
题记:Nginx之旅系列是用来记录Nginx从使用到源码学习的点点滴滴,分享学习Nginx的快乐 Nginx 首页: http://nginx.org/ Nginx的configuration 今天对 ...
- codeforces 6A. Triangle
A. Triangle time limit per test 2 seconds memory limit per test 64 megabytes input standard input ou ...
- 从零开始学C++之构造函数与析构函数(一):构造函数、析构函数、赋值与初始化、explicit关键字
一.构造函数.默认构造函数 (1).构造函数 构造函数是特殊的成员函数 创建类类型的新对象,系统自动会调用构造函数 构造函数是为了保证对象的每个数据成员都被正确初始化 函数名和类名完全相同 不能定义构 ...
- java基础知识拾遗(四)
1.Runnable对象 启动线程:(new Thread(new MyRunnable()).start() 2.jsp中<%@ page language="java" ...