python中re模块提供了正则表达式相关操作。

1、 字符串匹配:

  • .    匹配除换行符以外的任意字符

  • \w 匹配字符或数字或下划线或汉字

  • \s  匹配任意空白字符

  • \d 匹配数字

  • \b 匹配单词的开始或结束

  • ^  匹配字符串的开始

  • $   匹配字符串的结束

2、字符串次数匹配:

  • * 重复0次或多次

  • + 重复1次或多次

  • ?  重复0次或1次

  • {n} 重复n次

  • {n,} 重复n次或更多次

  • {n,m} 重复n到m次

3、re模块的方法

方法一:match

match:从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None.

1
2
3
4
#格式:re.match(pattern,string,flags=0)
#     pattern: 正则模型      
#     string:要匹配的字符串 
#     flags:匹配模式

举例说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#无分组
import re
  
str='hello,jack123'
  
r=re.match('h\w+',str)
print(r.group())        #获取匹配到的所有结果
print(r.groups())       #获取模型中匹配到的分组结果
print(r.groupdict())    #匹配模型中匹配到的分组结果
  
#结果:
hello
  
#有分组
#分组:为了提取匹配成功的指定内容(先匹配成功全部正则,然后再将匹配成功的局部内容提取出来)
  
r1=re.match('h(?P<name>\w+).*k(\d+)',str)
print(r1.group())       #获取匹配到的所有结果
print(r1.groups())      #获取模型中匹配到的分组结果
print(r1.groupdict())   #获取模型中匹配到的分组中所有 执行了key的组
  
#结果:
hello,jack123
('ello''123')
{'name''ello'}

方法二:search

search: 浏览整个字符串去匹配第一个,为匹配成功返回None,这里强调一下match方法是从开头去匹配。

格式: search(pattern,string,flags=0)

举例说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import re
str='123hello,jack123'
 
#无分组
r=re.search('h\w+',str)
print(r.group())         #获取匹配到的所有结果
print(r.groups())        #获取模型中匹配到的分组结果
print(r.groupdict())     #获取模型中匹配到的分组结果
 
#结果:
hello
()
{}
 
#有分组
r=re.search('h(?P<name>\w+).*k(?P<age>\d+)',str)
print(r.group())         #获取匹配到的所有结果
print(r.groups())        # 获取模型中匹配到的分组结果
print(r.groupdict())     # 获取模型中匹配到的分组中所有执行了key的组
 
#结果:
hello,jack123
('ello''123')
{'age''123''name''ello'}

方法三:findall

findall:获取非重复的匹配列表;如果有一个组则以列表形式返回,且每一个匹配均是字符串;如果模型中多个组,则以列表形式返回,且每一个匹配均是元组;空的匹配也会包含在结果中。

格式:findall(pattern,string,flags=0)

举例说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import re
 
str='123hello,jack123'
 
#无分组
= re.findall('h\w+',str)
print(r)
 
#结果:
['hello']
 
#有分组
r1= re.findall('h(\w+)',str)
print(r1)
 
#结果:
['ello']

方法四:sub

sub:替换匹配成功的指定位置的字符串

1
2
3
4
5
6
#格式:sub(pattern,repl,string,count=0,flags=0)
#pattern:正则模型
#repl   :要替换的字符串或可执行对象
#string :要匹配的字符串
#count  :指定匹配个数
#flags  :匹配模式

举例说明:

1
2
3
4
5
6
7
8
import re
  
str='123hello,jack123hello'
r=re.sub("h\w+",'456',str,1)   #将字符串hello替换成456,后面这个flags=1是匹配到结果后,如果是多个只替换一个,默认是全部替换
print(r)
 
#结果:
123456,jack123hello

方法五:split

split:根据正则匹配分割字符串

1
2
3
4
5
#格式:split(pattern, string, maxsplit=0, flags=0)
# pattern: 正则模型
# string : 要匹配的字符串
# maxsplit:指定分割个数
# flags  : 匹配模式

举例说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import re
 
str='123hello,jack123hello'
#无分组
r=re.split('hello',str,1)
print(r)
#结果:
['123'',jack123hello']
 
#有分组
r1=re.split('(hello)',str,1)
print(r1)
 
r2=re.split('(h(ell)o)',str,1)    #可以通过括号多切分几层,取到自己满意的结果为止
print(r2)
 
#结果:
['123''hello'',jack123hello']
['123''hello''ell'',jack123hello']
1
2
3
4
5
6
7
inpp = '1-2*((60-30 +(-40-5)*(9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2))'
inpp = re.sub('\s*','',inpp)                #将空格替换成空
new_content = re.split('\(([\+\-\*\/]?\d+[\+\-\*\/]?\d+){1}\)', inpp, 1)
print new_content
 
#结果:
['1-2*((60-30+''-40-5''*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))']

python(九)re模块的更多相关文章

  1. Python 全栈开发九 日志模块

    日志是一种可以追踪某些软件运行时所发生事件的方法.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情.一个事件可以用一个可包含可选变量数据的消息来描述.此外,事件也有重要性的概念 ...

  2. Python进阶(九)----json模块, pickle模块, os模块,sys模块,hashlib模块

    Python进阶----json模块, pickle模块, os模块,sys模块,hashlib模块 一丶序列化模块 什么是序列化: ​ 将一种数据结构,转换成一个特殊的序列(特殊字符串,用于网络传输 ...

  3. 【Python学习之九】模块

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 一.模块的使用和安装模块和C语言中的头文件以及Ja ...

  4. 学习PYTHON之路, DAY 6 - PYTHON 基础 6 (模块)

    一 安装,导入模块 安装: pip3 install 模块名称 导入: import module from module.xx.xx import xx from module.xx.xx impo ...

  5. python 中time模块使用

    在开始之前,首先要说明这几点: 1.在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主 ...

  6. 【Python之路】第六篇--Python基础之模块

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  7. Python中time模块详解

    Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...

  8. 周末班:Python基础之模块

    什么是模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写 ...

  9. 第四章:4.0 python常用的模块

    1.模块.包和相关语法 使用模块好处: 最大的好处是大大提高了代码的可维护性.其次,编写代码不必从零开始.当一个模块编写完毕,就可以被其他地方引用.我们在编写程序的时候,也经常引用其他模块,包括Pyt ...

随机推荐

  1. 第 6 章 贴近servlet

    服务器在获得请求的时候会先根据jsp页面生成一个java文件,然后使用jdk的编译器将此文件编译,最后运行得到的class文件处理用户的请求返回响应.如果再有请求访问这jsp页面,服务器会先检查jsp ...

  2. Java配置----JDK开发环境搭建及环境变量配置

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  3. 用session实现简单的购物

    package cn.itcast.shopping; import java.io.IOException; import java.io.PrintWriter; import java.util ...

  4. ORACLE常见错误代码的分析与解决

    (一)在使用ORACLE的过程过,我们会经常遇到一些ORACLE产生的错误,对于初学者而言,这些错误可能有点模糊,而且可能一时不知怎么去处理产生的这些错误,本人就使用中出现比较频繁的错误代码一一做出分 ...

  5. Excel文件读写

    C#读写Excel的方式有好几种,具体参考文章: http://www.cnblogs.com/huipengkankan/archive/2011/07/28/2120407.html 昨天大致研究 ...

  6. Masonry学习分享

    不完整目录 •UIScrollView 应用Masonry的正确用法 •tableHeaderView使用Masonry •同向文字显示优先级 1.基础篇 1.1基础使用 1.1.1运行效果 1.1. ...

  7. 有趣的BAT

    最近某个用到的第三方程序会产生很多日志文件在logs目录中,每天一个log文件,类似 2014-05-07001.log.日积月累这个目录文件数量非常多,手动清除还是比较麻烦的. 由于这个软件不是自己 ...

  8. View的drawRect方法

    1)此方法在View第一次在展示时调用,此后都用他的一个shotCut,可用setNeedsDisplay方法强制调用. 1)此方法在ViewDidAppear方法中才会调用.因此要想获得在drawR ...

  9. 【测试分析】HTSM模型

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5508428.html 概述 HTSM全称Heuristic ...

  10. Visual Studio中编写C程序

    相信很多科班出身的程序猿和我一样,第一个接触到的编程语言是C语言,第一个写的程序是“Hello World!”. 对于一个.Net程序猿,VS肯定是个非常熟悉的工具,但是如何使用VS编写一个C语言程序 ...