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. javascript 创建节点和新增节点

    createElement(tabName) 创建一个为tagName的新元素节点 ANode.appendChild(BNode)把B节点追加至A节点的末尾 insertBefore(ANode,B ...

  2. Assembly Experiment3

    AIMS & PREPARATIONS of THIS EXPERIMENT: 1st point of this experiment: realize the programme t1.a ...

  3. CentOS7之Rsync+Inotify架构实现实时同步文件和文件夹

    简介:rsync是用来同步文件和文件夹的,inotify是用来实现监听变动而自动同步的 OS:Centos7.3 服务器端:172.16.13.157 客 户 端  :172.16.13.156 目  ...

  4. mysql update where

    UPDATE car_approval a JOIN car_distribute b ON a.id = b.APPROVAL_FOR_CAR_ID SET a.APPROVAL_STATUS = ...

  5. 工控随笔_03_西门子_Step7项目打开后CPU显示问号解决方法

    我们在利用西门子的S7-300/400 PLC的编程软件Step7的时候会出现下面如图所示的问题. 在打开项目的时候,我们会在Simatic Manager里面看到CPU以及一些其他一些组件显示问号. ...

  6. Java 锁的学习

    个人学习整理,所有资料均来源于网络,非原创. 死锁的四个必要条件:互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用.请求与保持条件(Hold and wait):已经得 ...

  7. Mybatis中 Integer 值为0时,默认为空字符串的解决办法。

    需求是查询级别为0的用户 User对象里的level字段的值为0,查询时居然没有查到为level为0的用户. <select id="selectSelective" par ...

  8. Intel_AV-ICE06加速卡+QAT_Engine测试

    Intel AV-ICE06加速卡测试报告 Intel RSA加速卡结合Intel其QAT_Engine测试性能的提升,其支持的异步模式对性能的提升很大. 注意QAT_Engine只支持openssl ...

  9. TensorFlow-GPU+cuda8+cudnn6+anaconda安装遇到的版本错误

    第一遍装的时候是cuda10+cudnn5.1这个诡异的组合,失败 卸载cuda就是把所有的NVIDIA有关的应用都删掉,c盘文件也都删掉,不用留. 第二遍是cuda8+cudnn5.1.版本还是对不 ...

  10. centos7 系统优化脚本

    脚本一: #!/usr/bin/env bash #设置环境变量 export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sb ...