Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析、复杂字符串分析和信息提取时是一个非常有用的工具。python的re模块,在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息。python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配。

import re
print re.__doc__ # 查询re模块的功能信息

re的正则表达式语法


正则表达式语法表如下:

语法 意义 说明
"." 任意字符  
"^" 字符串开始 '^hello'匹配'helloworld'而不匹配'aaaahellobbb'
"$" 字符串结尾 与上同理
"*"  0 个或多个字符、表达式(贪婪匹配) <*>匹配<title>chinaunix</title>
"+" 1 个或多个字符、表达式(贪婪匹配) 与上同理
"?" 0 个或多个字符、表达式(贪婪匹配) 与上同理
*?,+?,?? 以上三个取第一个匹配结果(非贪婪匹配) <*>匹配<title>
{m,n} 对于前一个字符重复m到n次,{m}亦可 a{6}匹配6个a、a{2,4}匹配2到4个a
{m,n}? 对于前一个字符重复m到n次,并取尽可能少 ‘aaaaaa’中a{2,4}只会匹配2个
"\\" 特殊字符转义或者特殊序列  
[] 表示一个字符集 [0-9]、[a-z]、[A-Z]、[^0]
[^...] 不在[]中的字符 [^abc] 匹配除了a,b,c之外的字符。
"|" A|B,或运算
(...) 匹配括号中任意表达式  
(?#...) 注释,可忽略  
(?=...)

Matches if ... matches next, but doesn't consume the string.

前向肯定界定符。在当前位置成功匹配时成功,否则失败。

'(?=test)'  在hellotest中匹配hello
(?!...)

Matches if ... doesn't match next.

前向否定界定符。当所含表达式不能在字符串当前位置匹配时成功

'(?!=test)'  若hello后面不为test,匹配hello
(?<=...)  Matches if preceded by ... (must be fixed length). '(?<=hello)test'  在hellotest中匹配test
(?<!...) Matches if not preceded by ... (must be fixed length). '(?<!hello)test'  在hellotest中不匹配test

正则表达式特殊序列表如下:

特殊序列符号 意义
\A 只在字符串开始进行匹配
\Z 只在字符串结尾进行匹配
\z 匹配字符串结束
\b 匹配位于开始或结尾的空字符串
\B 匹配不位于开始或结尾的空字符串
\d 相当于[0-9]
\D 相当于[^0-9]
\s 匹配任意空白字符:[\t\n\r\r\v]
\S 匹配任意非空白字符:[^\t\n\r\r\v]
\w 匹配任意数字和字母:[a-zA-Z0-9]
\W

匹配任意非数字和字母:[^a-zA-Z0-9]

\G

匹配最后匹配完成的位置。

\n, \t, 等.

匹配一个换行符。匹配一个制表符。等

\1...\9

匹配第n个分组的子表达式。

\10

匹配第n个分组的子表达式,如果它经匹配。否则指的是八进制字符码的表达式。

re的功能函数


常用的功能函数包括:compile、search、match、split、findall(finditer)、sub(subn)

re.compile

把正则表达式语法转化成正则表达式对象

re.compile(pattern[, flags]) 

flags定义包括:

re.I:忽略大小写
re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.M:多行模式
re.S:’ . ’并且包括换行符在内的任意字符(注意:’ . ’不包括换行符)
re.U: 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
re.X:该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

更多用法可以在http://www.devexception.com/sitemap_index.xml上查找

注意:

我们常用的正则表达式方法,都已经自带了 compile了!根本没有必要多此一举先 re.compile再调用正则表达式方法。

def main():
content = 'Hello, I am Jerry, from Chongqing, a montain city, nice to meet you……'
#regex = re.compile('\w*o\w*')
x = re.findall('\w*o\w*',content)
#x = regex.findall(content)
print(x) if __name__ == '__main__':
main()

re.search

在字符串中查找匹配正则表达式模式的位置,返回 MatchObject 的实例,如果没有找到匹配的位置,则返回 None。

re.search(pattern, string[, flags])

search (string[, pos[, endpos]])

re.match

match() 函数只在字符串的开始位置尝试匹配正则表达式,也就是只报告从位置 0 开始的匹配情况,而 search() 函数是扫描整个字符串来查找匹配。如果想要搜索整个字符串来寻找匹配,应当用 search()。

re.match(pattern, string[, flags])

match(string[, pos[, endpos]])

re.split

可以将字符串匹配正则表达式的部分割开并返回一个列表

re.split(pattern, string[, maxsplit=0, flags=0])

split(string[, maxsplit=0])

re.findall

在字符串中找到正则表达式所匹配的所有子串,并组成一个列表返回

re.findall(pattern, string[, flags])

findall(string[, pos[, endpos]])

re.finditer

和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并组成一个迭代器返回。

re.finditer(pattern, string[, flags])

finditer(string[, pos[, endpos]])

re.sub

在字符串 string 中找到匹配正则表达式 pattern 的所有子串,用另一个字符串 repl 进行替换。如果没有找到匹配 pattern 的串,则返回未被修改的 string。Repl 既可以是字符串也可以是一个函数。

re.sub(pattern, repl, string[, count, flags])

sub(repl, string[, count=0])

pattern:表示正则中的模式字符串

repl:表示要被替换的,可以是字符串也可以是函数

string,要处理的字符串

count,限定替换的个数,默认为替换所有

flags,匹配模式,可以使用按位或‘|‘表示同时生效,也可以在正则表达式中指定。

re.subn

该函数的功能和 sub() 相同,但它还返回新的字符串以及替换的次数。

re.subn(pattern, repl, string[, count, flags])

subn(repl, string[, count=0])

【参考文档】

Python中正则表达式的详细教程:https://www.jb51.net/article/65286.htm

python中re模块的用法:https://blog.csdn.net/yjj20007665/article/details/52370264

Python之re(正则表达式)模块小结:https://blog.csdn.net/u014467169/article/details/51345657

http://docs.python.org/3.2/howto/regex.html#regex-howto

python re模块用法总结:https://blog.csdn.net/lengyue_wy/article/details/6999310

re.sub 使用方法:https://blog.csdn.net/MHSMIE/article/details/71941328

一日一技:请不要再用re.compile了!!!: https://cloud.tencent.com/developer/article/1453417

Python module ---- re的更多相关文章

  1. install python module

    [install python module] 参考:http://docs.python.org/2.7/install/index.html

  2. Nuke Python module的使用

    最近很多脚本工作都需要脱离nuke的gui环境运行,没有了script editor就必须要尝试Nuke Python module功能了.该模式可以执行大部分在GUI环境中的命令,在自动生成或者批量 ...

  3. __import__ 与动态加载 python module

    原文出处: koala bear    Direct use of __import__() is rare, except in cases where you want to import a m ...

  4. Python module中的全局变量

    Python module中的全局变量 我想要实现一个python module,这个module中有一些配置项,这些配置项可以被读取,被修改.一个可行的方案是把这些配置项写到一个叫settings. ...

  5. Python module all in one

    Python module all in one Python Modules https://docs.python.org/3/tutorial/modules.html Fibonacc # F ...

  6. Python.Module.site

    site " This module is automatically imported during initialization. The automatic import can be ...

  7. import 本地Python module或package

    很基础很重要的一课,虽然很简单,但是防止以后忘了,还是记下来 这个笔记里说的都是import本地的,自己创建的,或者复制粘贴的别人的,总之“不是安装到library”的module or packag ...

  8. python module的结构

    python有很多module,下面是module的结构图: 拿httplib做例子,httlip module有: 4个class( HTTPConnection,HTTPSConnection,H ...

  9. Python : Module

    在Python中,一个.py文件代表一个Module.在Module中可以是任何的符合Python文件格式的Python脚本.了解Module导入机制大有用处. 1 Module 组成 1.1 Mod ...

  10. python module install

    1.issue: How can I bypass kivy module error: ImportError: DLL load failed: The specified module coul ...

随机推荐

  1. api接口的记录

    http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=1& ...

  2. gcc and g++ 常用参数解释

    程序编译运行的过程 预处理.处理一些#include,#define命令,生成.i或者.ii文件: 编译.编译器进行语法分析,语义分析,中间代码生成,目标代码生成,优化,生成.s文件 汇编.汇编器把汇 ...

  3. 什么是真正的Java技术,本篇文章让你了解

    “你学习一门技术的最佳时机是三年前,其次是现在.”这句话对于哪一种行业都很适用,如果你已经学习过Java,那么恭喜你你很有先见之明,如果你并不了解Java,这篇文章带你快速掌握Java的几个核心知识点 ...

  4. 压力测试:系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式

    PS:下面是性能测试的主要概念和计算公式,记录下: 一.系统吞度量要素: 一个系统的吞度量(承压能力)与request对CPU的消耗.外部接口.IO等等紧密关联.单个reqeust 对CPU消耗越高, ...

  5. Windows7 Autoconfiguration IPv4 Address 导致无法上网

    Windows7 Autoconfiguration IPv4 Address 导致无法上 (2010-03-30 16:44:57) 转载▼ 标签: 杂谈 分类: 电脑软件问题 Windows7 A ...

  6. Linux csplit命令详解

    Linux csplit命令 Linux csplit命令用于分割文件.拆解文件主要是split和csplit命令,如果说split是按大小来拆分的话,那么csplit则可按匹配来拆分: 将文件依照指 ...

  7. sql,求和小于一定值的数据行

    select count(id),sum(Price) from [T_AddPrice] as a --order by id

  8. pll时钟延迟为问题

    pll时钟延迟为问题 这关系到pll的工作方式,如果pll内部使用的是鉴频器,则输入和输出将没有固定的相位差,就是每次锁定都锁定在某个相位,但每次都不一样.如果使用的是鉴相器,则输入和输出为0相位差. ...

  9. 使用Excel自动生成sql语句

    在近一段日子里,进入了新的项目组,由于项目需要,经常要将一些Excel表中的数据导入数据库中,以前并没有过多的接触过数据导入与数据处理,对于我来说比较痛苦,今天下午花了几个小时处理数据,但是同事给我提 ...

  10. 负载均衡中的session保持

    什么叫负载均衡中的session保持 当我们需要做负载均衡时,服务端肯定有多台服务器,用户每次请求进来,会根据负载均衡算法被分配到某一台机器上,假设用户需要进行一段连续操作时,在第一台机器登陆后,下一 ...