第十六章、 正则表达式
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 教程 第十六章、 正则表达式的更多相关文章

  1. 进击的Python【第十六章】:Web前端基础之jQuery

    进击的Python[第十六章]:Web前端基础之jQuery 一.什么是 jQuery ? jQuery是一个JavaScript函数库. jQuery是一个轻量级的"写的少,做的多&quo ...

  2. Flask 教程 第十六章:全文搜索

    本文翻译自The Flask Mega-Tutorial Part XVI: Full-Text Search 这是Flask Mega-Tutorial系列的第十六部分,我将在其中为Microblo ...

  3. python 教程 第二十二章、 其它应用

    第二十二章. 其它应用 1)    Web服务 ##代码 s 000063.SZ ##开盘 o 26.60 ##最高 h 27.05 ##最低 g 26.52 ##最新 l1 26.66 ##涨跌 c ...

  4. python 教程 第十五章、 结构布局

    第十五章. 结构布局 #!/usr/bin/env python #(1)起始行 "this is a module" #(2)模块文档 import sys #(3)模块导入 d ...

  5. python 教程 第十四章、 地址薄作业

    第十四章. 地址薄作业 #A Byte of Python #!/usr/bin/env python import cPickle import os #define the contacts fi ...

  6. python 教程 第十二章、 标准库

    第十二章. 标准库 See Python Manuals ? The Python Standard Library ? 1)    sys模块 import sys if len(sys.argv) ...

  7. python 教程 第十九章、 图形界面编程

    第十九章. 图形界面编程 import Tkinter top = Tkinter.Tk() hello = Tkinter.Label(top, text='Hello World!') hello ...

  8. C#图解教程 第十六章 转换

    转换 什么是转换隐式转换显式转换和强制转换 强制转换 转换的类型数字的转换 隐式数字转换溢出检测上下文 1.checked和unchecked运算符2.checked语句和unchecked语句 显式 ...

  9. 进击的Python【第十四章】:Web前端基础之Javascript

    进击的Python[第十四章]:Web前端基础之Javascript 一.javascript是什么 JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编 ...

随机推荐

  1. Delphi的指针(有图,很清楚)

    Pointers are like jumps, leading wildly from one part of the data structure to another. Their introd ...

  2. Classification and Representation

    Classification To attempt classification, one method is to use linear regression and map all predict ...

  3. [Angular] Providers and useFactory

    // service.ts import { Injectable, Inject } from '@angular/core'; import { Http } from '@angular/htt ...

  4. 终端复用工具tmux的使用

    tmux的作用在于终端复用. 1. 在server上启动一个bash.并在里面执行tmux 2. 通过ssh远程登录server,执行tmux attach,就会切换到server上的那个bash中, ...

  5. python开发环境设置(windows)

    python开发环境设置(windows) 1)  python2.7.3安装 在www.python.org上下载python-2.7.6.amd64.msi软件.安装完毕后设置path路径.控制面 ...

  6. Android 异步更新UI-线程池-Future-Handler实例分析

    前言: 我们在开发Android过程中,在处理耗时任务和UI交互的过程中,都会将耗时任务放到子线程处理并刷新. 下面我提出的两个问题,相信大多数开发者都会碰到: 1. 数据经常需要读取更新,并且比较耗 ...

  7. Docker入门之 - 如何安装Docker CE

    原文:Docker入门之 - 如何安装Docker CE 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012055638/article/det ...

  8. 基于 Android NDK 的学习之旅-----JNI 数据类型

    经典老套流程,学编程语言东西,先学它最基础的数据类型,JNI也是如此.JNI 定义了一系列基本数据类型和引用数据类型与java想对应. 1.基本数据类型 下面一张表是描述了 Java 基本数据类型和J ...

  9. [NPM] Create a bash script to replace a complex npm script

    In this lesson we will look at pulling out complex npm scripts into their own external bash scripts. ...

  10. Android 面试之横竖屏切换的Activity生命周期

    public class EngineerJspActivity extends Activity { private static String Tag = "EngineerJspAct ...