Python正则表达式模块(re)简介

2023-11-01

author:skate
time:2014/10/13


Python正则表达式模块(re)简介


一、Python中转义字符
    正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突,因此,Python用" \\\\ "表示正则表达式中的" \ ",
因为正则表达式中如果要匹配" \ ",需要用\来转义,变成" \\ ",而Python语法中又需要对字符串中每一个\进行转义,所以就变成了" \\\\ "。
    Python特别设计了原始字符串(raw string),需要注意的是,在写文件路径的时候就不要使用raw string了,raw string就是用'r'作为字符串
的前缀,如 r"\n":表示两个字符"\"和"n",而不是换行符了。Python中写正则表达式时推荐使用这种形式。

二、正则表达式元字符说明
.    匹配除换行符以外的任意字符
^    匹配字符串的开始
$    匹配字符串的结束
[]   用来匹配一个指定的字符类别
+    用来匹配前一个字符1次或无限次
?   对于前一个字符字符重复0次到1次
*    对于前一个字符重复0次到无穷次
{}   对于前一个字符重复m次
{m,n} 对前一个字符重复为m到n次
\d   匹配数字,相当于[0-9]
\D   匹配任何非数字字符,相当于[^0-9]
\s   匹配任意的空白符,相当于[ fv]
\S   匹配任何非空白字符,相当于[^ fv]
\w   匹配任何字母数字字符,相当于[a-zA-Z0-9_]
\W   匹配任何非字母数字字符,相当于[^a-zA-Z0-9_]
\b   匹配单词的开始或结束


三、基本使用

>>> import re    //导入模块
>>> dir(re)      //查看正则模块包含的方法
['DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE', 'M', 'MULTILINE', 'S', 'Scanner', 'T', 'TEMPLATE', 'U', 'UNICODE', 'VERBOSE', 'X', '_MAXCACHE', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__version__', '_alphanum', '_cache', '_cache_repl', '_compile', '_compile_repl', '_expand', '_pattern_type', '_pickle', '_subx', 'compile', 'copy_reg', 'error', 'escape', 'findall', 'finditer', 'match', 'purge', 'search', 'split', 'sre_compile', 'sre_parse', 'sub', 'subn', 'sys', 'template']
>>>

提示:当我们不会用模块方法的时候用help
>>> help(re.search)
Help on function search in module re:

search(pattern, string, flags=0)
    Scan through string looking for a match to the pattern, returning
    a match object, or None if no match was found.
(END)

 

例子:

使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),
最后使用Match实例获得信息,进行其他的操作。


# encoding: UTF-8
import re

# 将正则表达式编译成Pattern对象
pattern = re.compile(r'hello')

# 使用Pattern匹配文本,获得匹配结果,无法匹配时将返回None
match = pattern.match('hello world!')

if match:
    # 使用Match获得分组信息
    print match.group()

参考:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

 

四、常用的正则表达式处理函数

1. search(string[, pos[, endpos]]) | re.search(pattern, string[, flags]):
这个方法用于查找字符串中可以匹配成功的子串。从string的pos下标处起尝试匹配pattern,如果pattern结束时仍可匹配,则返回一个Match对象;
若无法匹配,则将pos加1后重新尝试匹配;直到pos=endpos时仍无法匹配则返回None。 pos和endpos的默认值分别为0和len(string));re.search()
无法指定这两个参数,参数flags用于编译pattern时指定匹配模式。


>>> # encoding: UTF-8
... import re
>>>
>>> # 将正则表达式编译成Pattern对象
... pattern = re.compile(r'world')
>>>
>>> # 使用search()查找匹配的子串,不存在能匹配的子串时将返回None
... # 这个例子中使用match()无法成功匹配
... match = pattern.search('hello world!')
>>>
>>> if match:
...     # 使用Match获得分组信息
...     print match.group()
...
world
>>>


2. split(string[, maxsplit]) | re.split(pattern, string[, maxsplit]):
按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,不指定将全部分割。

>>> import re
>>>
>>> p = re.compile(r'\d+')
>>> print p.split('one1two2three3four4')
['one', 'two', 'three', 'four', '']

 
 
 3. findall(string[, pos[, endpos]]) | re.findall(pattern, string[, flags]):
搜索string,以列表形式返回全部能匹配的子串。

>>> import re
>>>
>>> p = re.compile(r'\d+')
>>> print p.findall('one1two2three3four4')
['1', '2', '3', '4']


4. sub(repl, string[, count]) | re.sub(pattern, repl, string[, count]):
使用repl替换string中每一个匹配的子串后返回替换后的字符串。
当repl是一个字符串时,可以使用\id或\g<id>、\g<name>引用分组,但不能使用编号0。
当repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。
count用于指定最多替换次数,不指定时全部替换。

>>> import re
>>>
>>> p = re.compile(r'(\w+) (\w+)')
>>> s = 'i say, hello world!'
>>>
>>> print p.sub(r'\2 \1', s)
say i, world hello!
>>>
>>> def func(m):
...     return m.group(1).title() + ' ' + m.group(2).title()
...
>>> print p.sub(func, s)
I Say, Hello World!
>>>

 

 

---end----

 

参考:https://docs.python.org/2/library/re.html

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python正则表达式模块(re)简介 的相关文章

  • 一种GL error 501的原因和解决 ----no default precision defined引起

    1 问题背景 搞openGL 排查错误的一个好办法 是执行完一句GL调用 就加一句glGetError 如果有错误 这个函数会返回非0值 本文就是讨论 遇到了 glGetError返回0x501错误的问题 0x501一般代表 GL上下文环境
  • 对象和类,公有类和私有类,构造函数和析构函数,const成员函数,this指针,对象数组,类作用域,抽象数据

    下面是头文件stock00 h的内容 ifndef STOCK00 H define STOCK00 H include
  • Redis(7)-主从复制

    redis主从复制 1 主从复制 1 复制原理 2 哨兵模式 那么如何选择需要的新服务器呢 1 主从复制 就是指将主机数据更新后根据配置和策略 自动同步到备机master slave 其中master以写为主 slave以读为主 用处 读写
  • pkill(1) command

    文章目录 1 命令简介 2 命令格式 3 选项说明 4 常用示例 参考文献 大咖好呀 我是恋喵大鲤鱼 鄙人第二本开源书籍 后台开发命令365 上线啦 欢迎大家协同共建 1 命令简介 pkill process kill 杀死某一类进程 pk
  • FPGA之RAM详解,单口RAM的使用

    单口RAM IP练习 RAM在FPGA设计当中应用非常广泛 其种类有单口RAM 伪双口RAM 真双口RAM 但就实际项目开发而言 伪双口RAM应该是使用频率最多的 大家在学习实践的时候 也完全可以多做些对比 这样有更助于消化理解后加以灵活应
  • 矩阵乘以它的转置

    矩阵乘以它的转置 AA T A A T A A A 2即矩阵A乘以A的转置等于A的行列式的平方 明显不等于啦 1 2的矩阵转置矩阵为2 1 那么1 2的矩阵乘以2 1的转置矩阵得到一个1 1的矩阵 而2 1的转置矩阵乘以1 2的矩阵得到一个
  • 基于Dragonboard 410c的指纹锁(七)

    继续研究fingerprint在Android中的添加 上篇中HAL层的实现算是找到了 但是不知道是不是真的是这个 也不知道有没有被应用 既然驱动没有 那就往上看吧 开机时会开启各种服务 我们从开始启动指纹识别的service开始 路径 f
  • python小游戏——跑酷小恐龙代码开源

    作者 小刘在这里 每天分享云计算网络运维课堂笔记 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 夕阳下 是最美的 绽放 愿所有的美好 再疫情结束后如约而至 目录 一 效果呈现 二 主代码 三 cfg 四 README 一 效
  • Python配置免费的OCR图片识别文字(附代码)

    今天刷帖刷到一个网站 可以免费OCR识别 但是具体的次数我没有计算 文档上也没有具体说明 那么我们一起来看看吧 首先网址在这里 点我直达 1 我们需要注册一个账号 获取非常重要的参数 ColaKey 2 接着我们看一下文档说明 可跳过 点我
  • 用Python实现队列(queue)

    一 队列的定义 队列 一种先进先出 FIFO First in First Out 的线性结构 即在队列的尾部入队 在队列的头部出队 入队 即队列添加成员 在队列的尾部完成 出队 即队列删除成员 在队列的头部完成 在创建队列时 一般以数组为
  • 登陆界面的测试

    一 功能 1 用户名和密码 用户名和密码的合法性 长度 字符 空 用户名和密码的一致性 验证码的合法性和一致性 2 登陆功能 跳转正确 3 页面其他链接 如忘记密码 4 记住用户名 记住密码的功能 5 输入框是否支持复制和粘贴 6 密码显示
  • 图像分割:Python的SLIC超像素分割

    图像分割 Python的SLIC超像素分割 1 什么是超像素 2 为什么超像素在计算机视觉方面有重要的作用 3 简单线性迭代聚类 SLIC 4 效果图 5 源码 参考 1 什么是超像素 在单个或多个通道中 图像表示为像素网格 我们采用这些M
  • mysql8 java Could not create connection to database server. Attempted reconnect 3 times问题

    最近照着网上的一个博主的例子 学习ssm 结果一个mysql8 搞得我都崩溃了 各种连不上 总结一下出错原因 1 maven中的jdbc连接jar包 版本也要换成高版本
  • Linux基本权限(详解)

    目录 文件权限位 更改文件权限 chmod指令 chown指令 chgrp指令 数字权限 umask命令 文件权限位 显示当前目录下文件的详细信息 ls l 也可以写成 ll Linux下文件的权限位共有十个 按照1333来划分 第一位代表
  • 服务器操作系统比较,服务器操作系统比较

    服务器操作系统比较 内容精选 换一换 Atlas 800 训练服务器 型号 9000 安装上架 服务器基础参数配置 安装操作系统等操作请参见 Atlas 800 训练服务器 用户指南 型号9000 风冷 或 Atlas 800 训练服务器
  • 特征筛选3——卡方检验筛选特征(单变量筛选)

    sklearn文档 https scikit learn org stable modules generated sklearn feature selection chi2 html 卡方检验只适用分类任务 用来检验特征与y是否相互独立

随机推荐