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. vue-cil 服务端预渲染 prerender-spa-plugin

    众所周知单页面应用不利于SEO,为了解决这个问题网上所给出的2个解决方案1.SSH服务器端渲染2.预渲染由于页面较少,且预渲染相对于SSH比较简单,于是选择预渲染页面,预渲染可以极大的提高网页访问速度 ...

  2. Linux----------Openssh介绍以及用法

    一.OpenSSH介绍 OpenSSH这一术语指系统中使用的Secure Shell软件的软件实施.用于在远程系统上安全运行shell.如果您在可提供ssh服务的远程Linux系统中拥有用户帐户,则s ...

  3. mac 版本navicate 如何安装破解版

    https://www.jianshu.com/p/f42785e55b6b  博客地址 部分童鞋安装后没有rpk文件,我也不知道怎么解决实在不行,请下载破解版链接:https://pan.baidu ...

  4. (C#)生成指定长度的随机字符串的通用方法

    .NET(C#)生成指定长度的随机字符串的通用方法,此方法可以指定字符串的长度,是否包含数字,是否包含符号,是否包含小写字母,是否包含大写字母等, 源码: #region 生成指定长度的随机字符串 / ...

  5. Azure CosmosDB (9) Unique Key Constraints

    <Windows Azure Platform 系列文章目录> 在Azure Cosmos DB中,还支持Unique Key Constraints(唯一键约束). 我们可以在Azure ...

  6. python基础知识7---补充

    ''' 不可变:数字,字符串,元组 可变:列表,字典 原子:数字,字符串 容器:列表,元组,字典 直接访问:数字 顺序:字符串,列表,元组 映射访问:字典 ''' #一一对应 a,b,c,d,e='h ...

  7. 关于Oracle字符集在dmp文件导入导出中的乱码影响

    Oracle 在进行dmp备份和还原的时候,服务器端字符集和客户端字符集会对这个过程有较大影响,特别是数据表中存储了中文.存储过程中使用了中文编码(注释)的时候,如果没有处理好字符集的问题,在进行还原 ...

  8. MD5 Hashing in Java

    参考: MD5 Hashing in Java

  9. Unity Shader Graph(三)Phase In and Out

    软件环境 Unity 2018.1.6f1 Lightweight Render Pipeline 1.1.11-preview Phase In and Out效果预览 角色沿Y轴逐渐出现和消失 S ...

  10. Java读取Excel并与SqlServer库中的数据比较

    先说说需求.在SQL server数据库中的表里存在一些数据,现在整理的Excel文档中也存在一些数据,现在需要通过根据比较某个字段值(唯一)来判断出,在库中有但excel中没有的数据. 大概的思路就 ...