详解Python正则表达式re模块

正则是处理字符串最常用的方法,我们编码中到处可见正则的身影。

正则大同小异,python 中的正则跟其他语言相比略有差异:

1、替换字符串时,替换的字符串可以是一个函数
2、split 函数可以指定分割次数,这会导致有个坑
3、前项界定的表达式必须定长

下面详细描述下 re 模块的使用方法,其实,注意上面提到的三点差异就好

1、match

说明:
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回 None。

语法:
re.match(pattern, string, flags=0)

flags为可选标识,多个标识可以通过按位或 (|) 来指定。如 re.I | re.M 被设置成 I 和 M 标识:


修饰符


描述


re.I


使匹配对大小写不敏感


re.L


做本地化识别(locale-aware)匹配


re.M


多行匹配,影响 ^ 和 $


re.S


使 . 匹配包括换行在内的所有字符


re.U


根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.


re.X


该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

匹配成功re.match方法返回一个匹配的对象,可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。group() 或 group(0),返回整个正则表达式的匹配结果。

举例:

s= 'abc123abc'

print(re.match('[a-z]+', s))           # <_sre.SRE_Match object; span=(0, 3), match='abc'>

print(re.match('[a-z]+', s).group(0))      # abc
print(re.match('[\d]+', s))            # None
print(re.match('[A-Z]+', s, re.I).group(0))   # abc
print(re.match('[a-z]+', s).span())       # (0, 3)

2、search

说明:
re.search 扫描整个字符串并返回第一个成功的匹配。

语法:
re.search(pattern, string, flags=0)

匹配成功re.search方法返回一个匹配的对象,否则返回None。可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

s = 'abc123abc'

print(re.search('[a-z]+', s).group())  # abc
print(re.search('[a-z]+', s).span())   # (0, 3)
print(re.search('[\d]+', s).group())   # 123
print(re.search('[\d]+', s).span())   # (3, 6)
print(re.search('xyz', s))         # None

groupdict
groupdict 返回匹配到的所有命名子组的字典。

print(re.search('[a-z]+', s).groupdict())   # {}

print(re.search('(?P<letter>[a-z]+)(?P<num>\d+)', s).groupdict()) # {'num': '123', 'letter': 'abc'}

3、sub 和 subn

说明:
re.sub用于替换字符串中的匹配项。

re.subn返回一个元组,包含替换后的字符串及替换次数。

语法:
sub(pattern, repl, string, count=0, flags=0)

repl: 替换的字符串,也可为一个函数。

count: 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

举例:

s = 'abc123abc'

print(re.sub('[\d]+', '数字', s))  # abc数字abc
print(re.sub('[a-z]+', '字母', s, 1)) # 字母123abc

# 将匹配的数字乘以 2
def double(matched):
 value = int(matched.group('value'))
 return str(value * 2)

# repl是一个函数
print(re.sub('(?P<value>\d+)', double, s))  # abc246abc
print(re.subn('[\d]+', '数字', s))       # ('abc数字abc', 1)
print(re.subn('[a-z]+', '字母', s,))      # ('字母123字母', 2)
print(re.subn('[a-z]+', '字母', s, 1))     # ('字母123字母', 1)

4、compile

说明:
re.compile 用于编译正则表达式,生成一个正则表达式(Pattern)对象,供 match() 和 search() 这两个函数使用。

语法:
compile(pattern, flags=0)

举例:

s = 'abc123abc'

p = re.compile('[\d]+')

print(p.match(s, 4, 5).group(0)) # 2 从位置4开始匹配到位置5
print(p.search(s).group(0))   # 123

5、findall

说明:
re.findall 在字符串中查找正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

语法:
findall(pattern, string, flags=0)

举例:

s = 'abc123abc'

print(re.findall('[a-z]+', s)) # ['abc', 'abc']
print(re.findall('[h-n]+', s)) # []

6、finditer

说明:
finditer和 findall 类似,在字符串中查找正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

语法:
finditer(pattern, string, flags=0)

举例:

s = 'abc123def'

it = re.finditer('[a-z]+', s)

for match in it:
 print(match.group())

7、split

说明:
re.split 方法按照能够匹配的子串将字符串分割后返回列表。

语法:
split(pattern, string, maxsplit=0, flags=0)

maxsplit:分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。

举例:

print(re.split('a', '1A1a2A3', re.I))   # ['1A1', '2A3']

# 输出结果并未能区分大小写,这是因为re.split(pattern,string,maxsplit, flags)默认是四个参数,当我们传入的三个参数的时候,系统会默认re.I是第三个参数,所以就没起作用。
# 如果想让这里的re.I起作用,写成flags=re.I即可。
print(re.split('a', '1A1a2A3', flags=re.I))  # ['1', '1', '2', '3']

8、escape

说明:
re.escape对字符串里面的特殊字符串进行转义。

语法:
escape(pattern)

举例:

print(re.escape('www.dxy.cn')) # www\.dxy\.cn

9、正则

“(?P<name>…)”:分组,并将其命名为<name>。

“(?P=name)”:引用别名为<name>的分组匹配到的串。

10、前项(否定)界定中的特殊

正则中常用的前项界定(?<=exp)和前项否定界定(?<!exp)在 python 中会报错:look-behind requires fixed-width pattern,原因是 python 中前项界定的表达式必须是定长的,例如

(?<=aaa)   # 正确

(?<=aaa|bbb) # 正确

(?<=aaa|bb) # 错误

(?<=\d+)   # 错误

(?<=\d{3})  # 正确

以上所述是小编给大家介绍的Python正则表达式re模块详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • python的正则表达式re模块的常用方法

    1.re的简介 使用python的re模块,尽管不能满足所有复杂的匹配情况,但足够在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息.python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配. 复制代码 代码如下: import re print re.__doc__ 可以查询re模块的功能信息,下面会结合几个例子说明. 2.re的正则表达式语法 正则表达式语法表如下: 语法 意义 说明 "." 任意字符 "^" 字符串开始

  • 浅谈python中的正则表达式(re模块)

    一.简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行. 二.正则表达式中常用的字符含义 1.普通字符和11个元字符: 普通字符 匹配自身 abc abc . 匹配任意除换行符"\n"外的字符(在DOTALL模式中也能匹配换行符 a.c abc \ 转义字符,使后一个字符改变原来的意思 a\.c;a\\c a.c;a\c * 匹配前一个字

  • PYTHON正则表达式 re模块使用说明

    首先,运行 Python 解释器,导入 re 模块并编译一个 RE: #!python Python 2.2.2 (#1, Feb 10 2003, 12:57:01) >>> import re >>> p = re.compile('[a-z]+') >>> p <_sre.SRE_Pattern object at 80c3c28> 现在,你可以试着用 RE 的 [a-z]+ 去匹配不同的字符串.一个空字符串将根本不能匹配,因为 +

  • Python基础教程之正则表达式基本语法以及re模块

    什么是正则: 正则表达式是可以匹配文本片段的模式. 正则表达式'Python'可以匹配'python' 正则是个很牛逼的东西,python中当然也不会缺少. 所以今天的Python就跟大家一起讨论一下python中的re模块. re模块包含对正则表达式的支持. 通配符 .表示匹配任何字符: '.ython'可以匹配'python'和'fython' 对特殊字符进行转义: 'python\.org'匹配'python.org' 字符集 '[pj]ython'能够匹配'python'和'jython

  • python正则表达式re模块详细介绍

    本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以是Unicode字符,这点不用担心,python会处理地和Ascii字符一样漂亮. 正则表达式使用反斜杆(\)来转义特殊字符,使其可以匹配字符本身,而不是指定其他特殊的含义.这可能会和python字面意义上的字符串转义相冲突,这也许有些令人费解.比如,要匹配一个反斜杆本身,你也许要用'\\\\'来做为正则表达式的字符串,因为正则表达式要是\\,而字符串里,每个反斜杆都要写成\\. 你也可以在字符串前加上

  • Python的re模块正则表达式操作

    这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突,因此,Python用" \\\\ "表示正则表达式中的" \ ",因为正则表达式中如果要匹配" \ ",需要用\来转义,变成" \\ ",而Python语法中又需要对字符串中每一个\进行转义,所以就变成了" \\\\ &

  • python正则表达式re模块详解

    快速入门 import re pattern = 'this' text = 'Does this text match the pattern?' match = re.search(pattern, text) s = match.start() e = match.end() print('Found "{0}"\nin "{1}"'.format(match.re.pattern, match.string)) print('from {0} to {1}

  • 详解Python正则表达式re模块

    正则是处理字符串最常用的方法,我们编码中到处可见正则的身影. 正则大同小异,python 中的正则跟其他语言相比略有差异: 1.替换字符串时,替换的字符串可以是一个函数 2.split 函数可以指定分割次数,这会导致有个坑 3.前项界定的表达式必须定长 下面详细描述下 re 模块的使用方法,其实,注意上面提到的三点差异就好 1.match 说明: re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回 None. 语法: re.match(pat

  • 详解Python中string模块除去Str还剩下什么

    string模块可以追溯到早期版本的Python. 以前在本模块中实现的许多功能已经转移到str物品. 这个string模块保留了几个有用的常量和类来处理str物品. 字符串-文本常量和模板 目的:包含用于处理文本的常量和类. 功能 功能capwords()将字符串中的所有单词大写. 字符串capwords.py import string s = 'The quick brown fox jumped over the lazy dog.' print(s) print(string.capw

  • 详解 python logging日志模块

    目录 1.日志简介 2.日志级别 3.修改日志级别 4.日志记录到文件 5.指定日志格式 6.记录器(logger) 7.处理器(Handler) 8.处理器操作 9.格式器(formatter) 10.logging.basicConfig 11.日志配置 转自微信公众号: Python之禅 1.日志简介 说到日志,无论是写框架代码还是业务代码,都离不开日志的记录,他能给我们定位问题带来极大的帮助. 记录日志最简单的方法就是在你想要记录的地方加上一句 print , 我相信无论是新手还是老鸟都

  • 详解 python logging日志模块

    目录 1.日志简介 2.日志级别 3.修改日志级别 4.日志记录到文件 5.指定日志格式 6.记录器(logger) 7.处理器(Handler) 8.处理器操作 9.格式器(formatter) 10.logging.basicConfig 11.日志配置 转自微信公众号: Python之禅 1.日志简介 说到日志,无论是写框架代码还是业务代码,都离不开日志的记录,他能给我们定位问题带来极大的帮助. 记录日志最简单的方法就是在你想要记录的地方加上一句 print , 我相信无论是新手还是老鸟都

  • 详解Python中Addict模块的使用方法

    目录 介绍 1.安装 2.用法 3.要牢记的事情 4.属性,如键.item等 5.默认值 6.转化为普通字典 7.计数 8.更新 9.Addict 是怎么来的 介绍 Addit 是一个Python模块,除了提供标准的字典语法外,Addit 生成的字典的值既可以使用属性来获取,也可以使用属性进行设置. 这意味着你不用再写这样的字典了: body = {     'query': {         'filtered': {             'query': {              

  • 详解Python中matplotlib模块的绘图方式

    目录 1.matplotlib之父简介 2.matplotlib图形结构 3.matplotlib两种画绘图方法 方法一:使用matplotlib.pyplot 方法二:面向对象方法 1.matplotlib之父简介 matplotlib之父John D. Hunter已经去世,他的一生辉煌而短暂,但是他开发的的该开源库还在继续着辉煌.国内介绍的资料太少了,查阅了一番整理如下: 1968 出身于美国的田纳西州代尔斯堡. 之后求学于普林斯顿大学. 2003年发布Matplotlib 0.1版,初衷

  • 一文详解Python中logging模块的用法

    目录 一.低配logging 1.v1 2.v2 3.v3 二.高配logging 1.配置日志文件 2.使用日志 三.Django日志配置文件 一.低配logging 日志总共分为以下五个级别,这个五个级别自下而上进行匹配 debug-->info-->warning-->error-->critical,默认最低级别为warning级别. 1.v1 import logging logging.debug('调试信息') logging.info('正常信息') logging

  • 详解python中asyncio模块

    一直对asyncio这个库比较感兴趣,毕竟这是官网也非常推荐的一个实现高并发的一个模块,python也是在python 3.4中引入了协程的概念.也通过这次整理更加深刻理解这个模块的使用 asyncio 是干什么的? 异步网络操作并发协程 python3.0时代,标准库里的异步网络模块:select(非常底层) python3.0时代,第三方异步网络库:Tornado python3.4时代,asyncio:支持TCP,子进程 现在的asyncio,有了很多的模块已经在支持:aiohttp,ai

  • 详解Python 正则表达式模块

    由于最近需要使用爬虫爬取数据进行测试,所以开始了爬虫的填坑之旅,那么首先就是先系统的学习下关于正则相关的知识啦.所以将下面正则方面的知识点做了个整理.语言环境为Python.主要讲解下Python的Re模块. 下面的语法我就主要列出一部分,剩下的在python官网直接查阅即可: docs.python.org/3/library/r- 一.基础语法总结 1.1.匹配单个字符 a . \d \D \w \W \s \S [...] [^...] 匹配单个字符(.) 规则:匹配除换行之外的任意字符

  • 详解Python基础random模块随机数的生成

    随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的random模块提供了生成随机数的方法,使用这些方法时需要导入random模块. import random 下面介绍下Python内置的random模块的几种生成随机数的方法. 1.random.random() 随机生成 0 到 1 之间的浮点数[0.0, 1.0) . print("random: ", random.random()) #rando

随机推荐