python 教程 第十六章、 正则表达式
第十六章、 正则表达式
1) 匹配多个表达式
记号 re1|re2
说明 匹配正则表达式re1或re2
举例 foo|bar 匹配 foo, bar
记号 {N}
说明 匹配前面出现的正则表达式N
举例 [0-9]{3} 匹配
2) 匹配单个/多个/范围内字符
记号 .
说明 匹配任何字符(换行符除外)
举例 b.b 匹配 b和b中间有一个任意字符bab, bcb, bbb
举例 .. (匹配任何两个字符) 匹配 xx, ab
记号 […]
说明 匹配字符组里面出现的任意一个字符
举例 b[aeiou]t 匹配3字符串 bat,bit,but,bet
举例 [ab][23][xy] 匹配3字符串 a2x,a3y,b2x,b3x
记号 [..x-y..]
说明 匹配从字符x到y中的任意一个字符
举例 [0-9] 匹配任意一个十进制数字,
[A-Za-z] 匹配任意一个字母
3) 匹配开头结尾边界
记号 ^
说明 匹配字符串的开始
举例 ^Dear 匹配 任何以Dear开始的字符串
记号 $
说明 匹配字符串的结尾
举例 /bin/*sh$ 匹配 任何以/bin/*sh结束的字符串
4) 否定范围
记号 [^…]
说明 不匹配此字符集中出现的任何一个字符,包括某一范围的字符
举例 [^aeiou]匹配
[^A-Za-z0-9] 匹配
5) 多次出现/重复匹配
记号 *
说明 匹配前面出现的正则表达式零次或多次
举例 [A-Za-z0-9]* 匹配 a
记号 +
说明 匹配前面出现的正则表达式一次或多次
举例 [a-z]+\.com 匹配 qq.com, baidu.com
记号 ?
说明 匹配前面出现的正则表达式零次或一次
举例 goo? 匹配 go,goo
0?[1-9]匹配1到9的任意数字,前面可能有个0
记号 {M,N}
说明 匹配重复出现M次到N次的正则表达式
举例 [0-9]{5,10} 匹配5到9位数字,如QQ号码
[KQRBNP][a-h][1-8]-[a-h][1-8]国际象棋合法移动
记号 (*|+|?{})?
说明 用于上面出现的任何”非贪婪”.版本重复匹配次数符号
举例 .*?[a-z] 匹配
6) 特殊字符
记号 \d
说明 匹配任何数字,和[0-9]一样(\D为\d的反义,任何非数字符)
举例 data\d+.txt 匹配data后面一个或多个数字.txt
\d{3}-\d(3)-d{4} 匹配美国电话号码,如800-555-1212
记号 \w
说明 匹配任何数字字母字符,和[A-Za-z0-9_]相同,(\W为\w的反义)
举例 [A-Za-z_]\w+ 匹配任意字母再加任意一个字母或数字
\w+@\w+\.com 匹配一个电子邮件,如xxx@yyy.com
记号 \s
说明 匹配任何空白符,和[\n\t\r\v\f]相同(\S是\s的反义)
举例 of\sthe 匹配 of the
记号 \b
说明 匹配单词边界(\B是\b的反义)
举例 \bthe\b 仅匹配单词the
/bthe 任何以the开始的字符串
记号 \nn
说明 匹配已保存的子组(参考(…))
举例 price:\16 匹配
记号 \c
说明 逐一匹配特殊字符c(即取消特殊含义,按字面匹配)
举例 \.,\\,\* 匹配
记号 \A(\Z)
说明 匹配字符串的起始(结束)
举例 \ADear 以Dear开始的字符串
7) 用圆括号组建组
记号 (…)
说明 匹配封闭括号中正则表达式(RE),并保存为子组
举例 ([0-9]{3})?, f(oo|u)bar 匹配
\d+(\.\d*)? 匹配浮点型数字,任意十进制数字加一个可选小数部分(包括一个小数点,零个或多个十进制数字),如0.004,75等.
8) 其它
记号 literal
说明 匹配字符串的值
举例 foo 匹配 foo
import re;
patt = '(\w+)-(\d+)'
strg = 'abc-123'
m = re.match(patt, strg)
print m.group() #abc-123 //所有匹配部分
print m.group(1) #abc //匹配的子组1
print m.group(2) #123 //匹配的子组2
print m.groups() #('abc', '123') //所有匹配子组
findall找个每个匹配的部分
>>> re.findall('car', 'carry the car') #['car', 'car']
sub搜索替换
>>> re.sub('X', 'Mr.Smith', 'Dear X') #'Dear Mr.Smith'
subn搜索替换并返回次数
>>> re.subn('X', 'Mr.Smith', 'Dear X') #('Dear Mr.Smith', 1)
split分割字符串
>>> re.split(':', 'str1:str2:str3') #['str1', 'str2', 'str3']
贪婪匹配
data = ':1234567-8-9'
print re.search('\d+-\d+-\d+', data).group() #1234567-8-9
print re.match('.+\d+-\d+-\d+', data).group() #:1234567-8-9
print re.match('.+(\d+-\d+-\d+)', data).group(1) #7-8-9
print re.match('.+?(\d+-\d+-\d+)', data).group(1) #1234567-8-9
python 教程 第十六章、 正则表达式的更多相关文章
- 进击的Python【第十六章】:Web前端基础之jQuery
进击的Python[第十六章]:Web前端基础之jQuery 一.什么是 jQuery ? jQuery是一个JavaScript函数库. jQuery是一个轻量级的"写的少,做的多&quo ...
- Flask 教程 第十六章:全文搜索
本文翻译自The Flask Mega-Tutorial Part XVI: Full-Text Search 这是Flask Mega-Tutorial系列的第十六部分,我将在其中为Microblo ...
- python 教程 第二十二章、 其它应用
第二十二章. 其它应用 1) Web服务 ##代码 s 000063.SZ ##开盘 o 26.60 ##最高 h 27.05 ##最低 g 26.52 ##最新 l1 26.66 ##涨跌 c ...
- python 教程 第十五章、 结构布局
第十五章. 结构布局 #!/usr/bin/env python #(1)起始行 "this is a module" #(2)模块文档 import sys #(3)模块导入 d ...
- python 教程 第十四章、 地址薄作业
第十四章. 地址薄作业 #A Byte of Python #!/usr/bin/env python import cPickle import os #define the contacts fi ...
- python 教程 第十二章、 标准库
第十二章. 标准库 See Python Manuals ? The Python Standard Library ? 1) sys模块 import sys if len(sys.argv) ...
- python 教程 第十九章、 图形界面编程
第十九章. 图形界面编程 import Tkinter top = Tkinter.Tk() hello = Tkinter.Label(top, text='Hello World!') hello ...
- C#图解教程 第十六章 转换
转换 什么是转换隐式转换显式转换和强制转换 强制转换 转换的类型数字的转换 隐式数字转换溢出检测上下文 1.checked和unchecked运算符2.checked语句和unchecked语句 显式 ...
- 进击的Python【第十四章】:Web前端基础之Javascript
进击的Python[第十四章]:Web前端基础之Javascript 一.javascript是什么 JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编 ...
随机推荐
- Yarn架构基本概况(一)
1)引言 针对MRv1在扩展性.可靠性,资源利用率和多框架的支持上存在着明显的不足.进而诞生了下一代的MapReduce的计算框架MapReduce Version2,MRV1中有一个非常大的问题就是 ...
- JNI——Java调用C/C++函数
从C/C++到Java,再从Java回到C/C++,今天终于有机会了解了连接Java.C/C++的桥梁——JNI.哈哈!分享一下! 一.简介 JNI是Java native interface的简 ...
- js进阶 11-24 jquery如何实现选项卡的制作
js进阶 11-24 jquery如何实现选项卡的制作 一.总结 一句话总结:ul>li做选项卡的选项卡头,多个div做选项卡的内容,点到对应的li,就切换到对应的div,用index()获取l ...
- 小强的HTML5移动开发之路(48)——(小练习)新闻订阅系统【1】
一.总体设计 二.数据库设计 --新闻类别表 create table news_cate( news_cateid int primary key auto_increment, news_icon ...
- IOS开发中经常使用的宏定义
ios讨论群1群:135718460 有些时候.我们须要将代码简洁化,这样便于读代码.我们能够将一些不变的东东抽取出来.将变化的东西作为參数. 定义为宏,这样在写的时候就简单多了. 以下例举了一些经常 ...
- 于 Android NDK 的学习之旅-----数据传输(基本数据类型和数组传输)
之前的一些文章都有涉及到上层和中间层的数据传输,简单来说,也就是参数和返回值的使用.因为中间层要做的最多的也就是数据传输与转换,下面来介绍下这方面的知识. 数据传输可分为 基本数据类型传输 和 引用数 ...
- js进阶 10-10 可见伪类选择器和内容伪类选择器的作用
js进阶 10-10 可见伪类选择器和内容伪类选择器的作用 一.总结 一句话总结:分组来描述.内容伪类选择器就是 四个 包含.可见的伪类选择器就是可见和不可见.查找功能,也就是内容伪类选择器非常 ...
- OSGi开发环境的建立
1 OSGi开发环境的建立 1.1 Equinox是什么 从代码角度来看,Equinox其实就是OSGi核心标准的完整实现,并且还在这个基础上增加了一些额外的功能(比如为框架增加了命令行和程序执行的入 ...
- 理解Erlang/OTP - Application
http://www.cnblogs.com/me-sa/archive/2011/12/27/erlang0025.html 1>application:start(log4erl). 我们就 ...
- C#反射应用
考虑这个是因为返回的是对象集合,需要把对象集合绑定到datagridview上,绑定datagridview需要数据源,组装数据的话,用datatable添加列很麻烦,所以用反射来实现,估计可能会有多 ...