简介:

正则表达式本身是一个小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,我们可以通过直接调用来实现正则匹配。

正则表达式基础知识:

--普通字符
匹配自身 abc ----abc

--元字符

. :匹配任何字符(\n)换行符除外
例:a.a -----aba

\ :转义字符
例:a\tb ---a b

* :匹配前一个字符0或多次
例:a*b ----aaaab;b

+ :匹配前一个字符1次或多次
例:a+b ----aaaab;ab

? :匹配一个字符0次或1次
例:a?b ---b;ab

^ :匹配字符串开头,多行匹配每一行开头
例:^ab ---ab

$ :匹配字符串末尾,多行匹配每一行末尾
例:ab$ ---ab;cb

reg1 | reg2 :匹配正则表达式reg1或reg2
例:foo | bar ---foo;bar

{} : a{m}匹配字符m次,a{m,n}匹配字符m至n次,若省略n,则匹配m至无限次
例:a{1,2}b ---aab

[] :字符集,对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[^abc]表示取反,即非abc.
注:所有特殊字符在字符集中都失去其原有的特殊含义。用\反斜杠转义恢复特殊含义。
例:a[bcd]e ---abcde

() :最基本的组是由一对圆括号括起来的正则式。
例:(abc){2}a(2|4)d ---abcabca4d

--特殊字符

\d :数字1~9
例:a\db ---a1b

\D:非数字[^\d]
例:a\Dc ----abc

\s:匹配任意空白字符[ \t\r\n\f\v]
例:a\sb ---a b

\S:非空白字符[^\s]
例:a\Sb ---abc

\w:匹配包括下划线在内的任意字符[A-Za-z0-9_]
例:a\wc ---abc

\W:匹配非单词字符[^A-Za-z0-9_]
例:a\Wb ---a b

\A:仅匹配字符串开头,同^
例:\Aabc ---abc

\Z:仅匹配字符串末尾,同$
例:abc\Z ----abc

\B:匹配\w和\W之间,即匹配单词边界匹配一个单词边界,也就是指单词和空格间的位置。
例:’er\b‘ 可以匹配’never‘ 中的’er‘,但不能匹配’verb‘中的’er‘

\B:[^\b]
例:a\Bbc ---abc

正则表达式的常用函数:

match和search一旦匹配成功,就是一个match object对象,而match object对象有以下方法:
group():返回被re匹配的字符串
可以一次输入多个组号,对应组号匹配的 字符串

start():返回匹配开始的位置
end():返回匹配结束的位置
spend():返回一个元组包含匹配(开始,结束)的位置

1、compile()
编译正则表达式模式,返回一个对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率)
re.compile(pattern,flags=0)
pattern:编译时用的表达式字符串。
flags:编译标志位,用于修正正则表达式的匹配方式,如:是否区分大小写,多行匹配等,常用的flags有:

re.S(DOTALL):使‘.’特殊字符匹配任何字符,包括换行;如果没有此标志,‘.’将匹配任何内容除换行符。

re.I(IGNORECASE):使匹配对大小写不敏感。

re.L(LOCALE):做本地化识别(locale-aware)匹配

re.M(MULTILINE):多行匹配,影响^和$

re.X(VERBOSE):该标志通过给予更灵活的格式以便将正则表达式写的更易于理解

re.U:根据Unicode字符集解析字符,这个标识影响\w,\W,\b,\B

2、match()
决定re是否在字符串刚开始的位置匹配。
注:这个方法并不是完全匹配。当pattern结束时若string还有剩余字符,仍然视为成功。想要完全匹配,可以在表达式末尾加上边界匹配符‘$’
格式:re.match(pattern,string,flags=0)

例:
print(re.match('com','comwww.runcomoob').group())
print(re.match('com','Comwww.runcomoob',re.I).group())

>>com
>>Com

3、search()
re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None
格式:re.search(pattern,string,flags=0)

例:
print(re.search('\dcom','4com5com').group())

>>4com

4,findall()
re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。
格式:
re.findall(pattern,string,flags=0)
例1:
p=re.compile(r'\d+')
print(p.findall('h32h3jh2uhr23'))

>>['32', '3', '2', '23']

5、finditer()
搜索string,返回一个顺序访问每一个匹配结果(match)对象的迭代器。找到re匹配的所有字符串,并把它们作为一个迭代器返回。
格式:
re.finditer(pattern,string,flags=0)
例:
iter=re.finditer(r'\d+','12gjh232jkg34')
for i in iter:
print(i)
print(i.group())
print(i.span())
#返回迭代器对象;匹配数值;位置
>><_sre.SRE_Match object; span=(0, 2), match='12'>
12
(0, 2)
>><_sre.SRE_Match object; span=(5, 8), match='232'>
232
(5, 8)
>><_sre.SRE_Match object; span=(11, 13), match='34'>
34
(11, 13)

6、split()
按照能够匹配的字符串string分割后返回列表。
可以使用re.split来分割字符串,如:re.split(r'\s+',text);将字符串按空格分割成一个列表。
格式:
re.split(pattern,string,maxsplit=0,flags=0)
例:
print(re.split('\d+','ont1two2three3four4five5',3))
>>['ont', 'two', 'three', 'four4five5']

7、sub()
使用re替换string中每个匹配的字符串返回后的值。
格式:
re.sub(pattern,repl,string,count)
例:
text='ont1two2three3four4five5'
print(re.sub(r'\d+',' ',text))
>>ont two three four five

8、subn()
返回替换次数
格式:
subn(pattern,repl,string,count=0,flags=0)
例:
print(re.subn(r'\d',' ','ont1two2three3four4five5'))
>>('ont two three four five ', 5)

python--模块之re正则表达式的更多相关文章

  1. python模块之re正则表达式

    41.python的正则表达式      1. python中re模块提供了正则表达式相关操作 字符: . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字      \W大写代表非\w ...

  2. Python模块之常用模块,反射以及正则表达式

    常用模块  1. OS模块 用于提供系统级别的操作,系统目录,文件,路径,环境变量等 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("di ...

  3. python re 模块和基础正则表达式

    1.迭代器:对象在其内部实现了iter(),__iter__()方法,可以用next方法实现自我遍历. 二.python正则表达式 1.python通过re模块支持正则表达式 2.查看当前系统有哪些p ...

  4. Python数据分析学习-re正则表达式模块

    正则表达式 为高级的文本模式匹配.抽取.与/或文本形式的搜索和替换功能提供了基础.简单地说,正则表达式(简称为 regex)是一些由字符和特殊符号组成的字符串,它们描述了模式的重复或者表述多个字符,于 ...

  5. 【笔记】Python基础七:正则表达式re模块

    一,介绍 正则表达式(RE)是一种小型的,高度专业化的编程语言,在python中它内嵌在python中,并通过re模块实现.正则表达式模式被编译成一系列的字节码,然后由C编写的匹配引擎执行. 字符匹配 ...

  6. Python编程中 re正则表达式模块 介绍与使用教程

    Python编程中 re正则表达式模块 介绍与使用教程 一.前言: 这篇文章是因为昨天写了一篇 shell script 的文章,在文章中俺大量调用多媒体素材与网址引用.这样就会有一个问题就是:随着俺 ...

  7. Python开发基础-Day14正则表达式和re模块

    正则表达式 就其本质而言,正则表达式(或 re)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 ...

  8. Py修行路 python基础 (二十一)logging日志模块 json序列化 正则表达式(re)

    一.日志模块 两种配置方式:1.config函数 2.logger #1.config函数 不能输出到屏幕 #2.logger对象 (获取别人的信息,需要两个数据流:文件流和屏幕流需要将数据从两个数据 ...

  9. python基础之 re(正则表达式)模块学习

    今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. re.match re.match 尝试从 ...

  10. [Python] 网络爬虫和正则表达式学习总结

    以前在学校做科研都是直接利用网上共享的一些数据,就像我们经常说的dataset.beachmark等等.但是,对于实际的工业需求来说,爬取网络的数据是必须的并且是首要的.最近在国内一家互联网公司实习, ...

随机推荐

  1. 优秀 Java 程序员写代码的风格

    往 期 精 彩 推 荐    [1]Java Web技术经验总结 [2]15个顶级Java多线程面试题及答案,快来看看吧 [3]面试官最喜欢问的十道java面试题 [4]从零讲JAVA ,给你一条清晰 ...

  2. DB TABLE实践

    我的数据库设计实践(一)   兜兜转转,突然发现我现在已经是一个老司机了,一直写代码都很忙,没有把很多点点滴滴的记录下来,今天开始就开始一个系列,分析当年我接触或者我设计过的表结构,有好有坏,有欢喜也 ...

  3. windows下libevent的编译及使用

    之前简单分析了libevent的源码,过了一段时间要用的时候发现完全忘记了..从头记录一下流程 1.编译 可以从github下载libevent的压缩包,解压后 修改以下三个文件,添加宏定义: 在以下 ...

  4. jmeter报告优化---展示详细信息

    参考文档:https://www.cnblogs.com/puresoul/p/5049433.html 楼上博主写的还是很详细,在报告优化这块,但是在操作中也走了一些弯路,我改动了两个点才成功,根据 ...

  5. 【转】Windows Error Code(windows错误代码详解)

    本文来自: http://blog.sina.com.cn/s/blog_5e45d1be0100i0dr.html http://blog.sina.com.cn/s/blog_5e45d1be01 ...

  6. nrf52840蓝牙BLE5.0空中数据解析

    一.基础知识: 我没找到蓝牙5.0的ATT数据格式图片,在蓝牙4.0的基础上做修改吧,如下图所示:   二.测试与分析: 参数设置: data length = 251字节,MTU = 247字节, ...

  7. 【绝迹篇】C#RSA算法实现

    当下最流行的RSA加密算法,只有公钥和私钥同时拥有才能破解加密信息,RSA加密算法的出现有利于数据安全性传输 1.C#中自带RSACryptoServiceProvider类可以让你很好的生成XML格 ...

  8. 实例:接口并发限流RateLimiter

    需求:接口每秒最多只能相应1个请求 1.创建 全局类对象 import com.google.common.util.concurrent.RateLimiter; import org.spring ...

  9. PAT——1010. 一元多项式求导

    设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式:以与 ...

  10. 【题解】洛谷P1052 [NOIP2005TG] 过河(DP+离散化)

    题目来源:洛谷P1052 思路 一开始觉得是贪心 但是仔细一想不对 是DP 再仔细一看数据不对 有点大 如果直接存下的话 显然会炸 那么就需要考虑离散化 因为一步最大跳10格 那么我们考虑从1到10都 ...