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. React 生命周期简介

       React 中组件的生命周期会经历如下三个过程:装载过程.更新过程.卸载过程. 装载过程:组件实例被创建和插入 DOM 树的过程: 更新过程:组件被重新渲染的过程: 卸载过程:组件从 DOM 树 ...

  2. Cross Platform Note: STD C++ Preprocessor directives & pre-defined macros

    ref: http://www.cplusplus.com/doc/tutorial/preprocessor/ concolusion: directives: #define #undef #in ...

  3. nginx ngx_http_image_filter_module 简单试用

    nginx包含了一个ngx_http_image_filter_module 模块,我们可以方便的进行图片的缩略图,平时一些简单的功能 已经够用了 环境准备 为了简单使用docker-compose ...

  4. jq源码判断数据类型

    4.Object.prototype.toString.call() 1 var a = Object.prototype.toString; 2 3 console.log(a.call(" ...

  5. Excel--截取所需内容

    如上图,需截取*号后的数字,那么公式怎么写: 1.使用Find和Mid函数: FIND:获取指定字符所在字串的位置: MID:截取字串中的子串. 写法: 2.也可以使用Replace函数代替mid函数 ...

  6. C语言volatile关键字的用法

    volatile关键字的意义在于让被关键字修饰的变量每次使用时都重新去主内存里读取变量,而不是从高速缓存去读取. int a = 1; 普通变量定义之后,若要使用它,都会 先把它的值从主内存拷贝到高速 ...

  7. 【linux】之日志查看

    搜索日志 -n 显示行号 grep 1570xxxx -n callback.tomcat-catalina-out 显示从第多少行~多少行 sed -n '464913,465020p' callb ...

  8. 学习python第三天

    变量的命名规范 1.只能有 字母 数字 及_组成 2.不能以数字开头 3.避免与系统关键词重名:重名不会报错,但系统的功能就被自定义的功能屏蔽掉了(严重不建议这样做) 4._开头的变量都有特出含义 5 ...

  9. http协议和telnet指令讲解

    http协议: 1.http:是网络传输协议:全称为:超文本传输协议: 关系:客户端和服务器的关系: 协议:就是一种规范: 常见的http和https两种,https是http的升级版 http协议: ...

  10. selenium常用的API

    打开浏览器 driver.get("http://www.baidu.com") 最大化浏览器 driver.maximize_window() 关闭浏览器 driver.quit ...