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. 终于懂得Perl句柄是什么意思了

    一直以来就对Perl语言特别感兴趣,去年特别膨胀的 直接买了一本大骆驼书,想好好看看Perl编程,结果看到I/O,句柄的时候就觉得云山雾罩,不知道是在说啥了, 最近,京东打折,终于有机会又买了本小骆驼 ...

  2. python 2.7 pip导入django,将python部署到sublime上

    1.安装python 2.7,并且导入第三方库django 下载python 2.7,然后把python2.7的python.exe的路径和pip的路径添加到系统环境变量的path路径下. win+R ...

  3. C# EnumHelper Enum的值,Description,ToString()的相互转换

    首先定义枚举类型,如下: /// <summary> /// 板块 /// </summary> public enum Plate {         [Descriptio ...

  4. MQ实战

    MQ是什么? MQ(消息队列)是一种跨进程的通信机制,用于上下游传递消息. MQ的优点 异步处理,代码解藕. spring中集成MQ的实现 1. xml配置 <?xml version=&quo ...

  5. Ubuntu下重新安装软件 配置文件不重新生成得问题解决

    apt-get remove nfs dpkg -P nfs apt-get install nfs 按照先remove然后dpkg -P再重新install的顺序.

  6. mysql update where

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

  7. python第三方库之PyGraphics

    有一段代码要import media,打开python自带的IDLE,输入: >>>import media 就会提示没有media这个模块! 原来media模块不是系统的标准模块, ...

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

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

  9. python中Multiprocessing

    import multiprocessing as mp #该函数不能有返回值,如果需要则应该将值放在queue中 def job(a,b): print('aaaa') if __name__ == ...

  10. DOM 核心

    继承在DOM中的重要性: 1. Node 对象 2. Element 对象 3. Document 对象