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 正则表达式)提供各种正则表达式的匹配操作,在文本解析.复杂字符串分析和信息提取时是一个非常有用的工 ...
随机推荐
- [google面试CTCI] 2-0.链表的创建
创建链表.往链表中插入数据.删除数据等操作,以单链表为例. 1.使用C语言创建一个链表: typedef struct nd{ int data; struct nd* next; } node; / ...
- [google面试CTCI]1-3.字符串去重
[字符串与数组] Q:Design an algorithm and write code to remove the duplicate characters in a string without ...
- .NET重构—单元测试重构
.NET重构—单元测试重构 阅读目录: 1.开篇介绍 2.单元测试.测试用例代码重复问题(大量使用重复的Mock对象及测试数据) 2.1.单元测试的继承体系(利用超类来减少Mock对象的使用) 2.1 ...
- URL 调度器(URL dispatcher)
URL 调度器(URL dispatcher) 在刚开始接触 django 的时候, 我们尝试着从各种入门文档中创建一个自己的 django 项目, 需要在 mysite.urls.py 中配置 UR ...
- C语言的一些常见细节
C语言的一些常见细节 对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所有测试结果基于这个 ...
- Apple的通知
Apple的通知 1. 本地通知 //取消原来的通知,可设可不设 [[UIApplication sharedApplication]cancelAllLocalNotifications]; //初 ...
- iOS 监听声音按键
有时在项目中需要监听用户是否按下了物理声音键,然后来做某些操作,如:你自定义了一个照相功能,希望用户按下声音按键时也能进行拍照,苹果自带的照相机就有这种功能. 监听物理声音键是否按下的方法有很多中,我 ...
- grub 的安装与使用
安装与使用grub 要开始探究 GRUB 的精妙之处,首先需要下载.编译和安装它.但不要害怕 -- 根本不会修改您的引导记录 -- 我们只是要编译和安装 GRUB,就像其它程序一样,在此过程中我们可以 ...
- Python爬虫小白入门(五)PhatomJS+Selenium第二篇
一.前言 前文介绍了PhatomJS 和Selenium 的用法,工具准备完毕,我们来看看如何使用它们来改造我们之前写的小爬虫. 我们的目的是模拟页面下拉到底部,然后页面会刷出新的内容,每次会加载10 ...
- windows下使用命令查看端口占用情况
使用下面的命令查看端口占用情况: 比如查看3000端口的占用情况 netstat -ano|findstr 3000 运行后,结果如下: 可以看到进程号为9692的占用了该端口,使用下面的命令查看是哪 ...