正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

re 模块使 Python 语言拥有全部的正则表达式功能。

compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。

re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数

1.正则表达式修饰符 --可选标志

   正则表达式可以包含一些可选标志修饰符来控制匹配的模式

 修饰符被指定为一个可选的标志。多个标志可以通过按位OR(|)来指定。如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 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

2.正则表达式模式

    下图列出了Python支持的正则表达式元字符和语法(图片来自http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html)

3.re模块

   1)re.match函数

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

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

  pattern:匹配的正则表达式

  string:匹配的字符串

  flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

  匹配成功re.match方法返回一个匹配的对象,否则返回None。


start()                 返回匹配开始的位置                                                                                    
end() 返回匹配结束的位置
span() 返回一个元组包含匹配 (开始,结束) 的位置
group() 返回被 RE 匹配的字符串
group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。


实例一:
 #!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
# @time : 2017/4/26 20:03
# @author : huange
# @version : 1.1
# @file : test2.py
# @Software: PyCharm
'''
import re
print(re.match('www','www.hh.com').span()) # 在起始位置匹配
print(re.match('com','www.hh.com')) # 不在起始位置匹配 结果:
(0,3)
None
实例二:
 #!/usr/bin/python3
import re line = "Cats are smarter than dogs" obj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I) if obj:
print ("obj.group() : ", obj.group())
print ("obj.group(1) : ", obj.group(1))
print ("obj.group(2) : ", obj.group(2))
print(obj.start())
print(obj.end())
print(obj.groups())
else:
print ("No match!!") 结果:
obj.group() : Cats are smarter than dogs
obj.group(1) : Cats
obj.group(2) : smarter
0
26
('Cats', 'smarter')
2)re.search函数
re.search扫描整个字符串并返回第一个成功的匹配
函数语法: re.match(pattern,string, flags=0)
pattern:匹配的正则表达式
string:匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
匹配成功re.search方法返回一个匹配的对象,否则返回None。 实例一:
 import re
print(re.search('www','www.hh.com').span())
print(re.search('com','www.hh.com').span()) 结果:
(0,3)
(7,10)
实例二:
 #!/usr/bin/python3
import re line = "Cats are smarter than dogs" obj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I) if obj:
print ("obj.group() : ", obj.group())
print ("obj.group(1) : ", obj.group(1))
print ("obj.group(2) : ", obj.group(2))
print(obj.start())
print(obj.end())
print(obj.groups())
else:
print ("No match!!") 结果:
obj.group() : Cats are smarter than dogs
obj.group(1) : Cats
obj.group(2) : smarter
0
26
('Cats', 'smarter')
PS:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None; re.search匹配整个字符串,直到找到一个匹配。

3)re.sub函数
  re.sub用于替换字符串中匹配到的选项
  函数语法:re.sub(pattern, repl, string, count=0)
 
pattern : 正则中的模式字符串。
  repl : 替换的字符串,也可为一个函数。
  string : 要被查找替换的原始字符串。
  count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

实例一:
 #!/usr/bin/python3
import re
phone = '135-4238-5642 # 电话号码' # 删除注释
num = re.sub('#.*$','',phone)
print(num) # 删除非字符
num = re.sub('\D','',phone)
print(num) 结果:
135-4238-5642
13542385642

实例二:

 #!/usr/bin/python

 import re

 # 将匹配的数字乘于 2
def double(matched):
value = int(matched.group('value'))
return str(value * 2) s = 'A23G4HFD567'
print(re.sub('(?P<value>\d+)', double, s)) 结果为:
A46G8HFD1134

4)re.split函数

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

 import re

 p = re.split(r'\d+','one1two2three3four4')
print(p) 结果:
['one','two','three','four','']

5)re.findall函数
   以列表的形式返回能全部匹配到的子串

 函数语法:re.findall(pattern, string ,flags):

 import re

 p = re.findall(r'\d+','one1two2three3four4')
print(p) 结果:
['','','','']



 

Python学习 ——正则表达式的更多相关文章

  1. python学习——正则表达式

    正则表达式                        正则表达式的主要作用就是对字符串进行匹配,通过匹配,进行筛选,选择出符合规则的字符串.其实正则表达式的作用就像是一个过滤器一样.你输入好自己的 ...

  2. python学习 正则表达式

    一.re 模块中 1.re.match #从开始位置开始匹配,如果开头没有match()就返回none 语法:re.match(pattern, string, flags=0) pattern 匹配 ...

  3. python学习-正则表达式(十)

    1.查看re模块的全部属性和函数 >>>import re,pprint >>>pprint.pprint(re.__all__) ['match', 'fullm ...

  4. [python 学习]正则表达式

    re 模块函数re 模块函数和正则表达式对象的方法match(pattern,string,flags=0) 尝试使用带有可选的标记的正则表达式的模式来匹配字符串.如果匹配成功,就返回匹配对象:如果失 ...

  5. 四、python学习-正则表达式

    正则表达式 import re lst = re.findall(正则表达式,需要匹配的字符串) findall 把所有匹配到的字符串都搜出来,返回列表 不能把分组内容和匹配内容同时显示出来 sear ...

  6. Python学习笔记——正则表达式入门

    # 本文对正则知识不做详细解释,仅作入门级的正则知识目录. 正则表达式的强大早有耳闻,大一时参加一次选拔考试,题目就是用做个HTML解析器,正则的优势表现得淋漓尽致.题外话不多讲,直接上干货: 1. ...

  7. 学习 正则表达式 js java c# python 通用

    正则表达式 js java c# python 学习网站 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Globa ...

  8. 【Python学习笔记四】获取html内容之后,如何提取信息:使用正则表达式筛选

    在能够获取到网页内容之后,发现内容很多,那么下一步要做信息的筛选,就和之前的筛选图片那样 而在python中可以通过正则表达式去筛选自己想要的数据 1.首先分析页面内容信息,确定正则表达式.例如想获取 ...

  9. [Python学习笔记]正则表达式总结

    常用缩写字符及其含义表格查询 缩写字符分类 含义 \d 0-9的任意数字 \D 除0-9的数字以外的任何字符 \w 任何字母.数字或下划线字符(可以认为是匹配"单词"字符) \W ...

随机推荐

  1. IDEA常用快捷键[转]

    原文:http://www.cnblogs.com/wxdlut/p/3410541.html 查询快捷键CTRL+N   查找类CTRL+SHIFT+N  查找文件CTRL+SHIFT+ALT+N  ...

  2. hadoop学习笔记之一步一步部署hadoop分布式集群

    一.准备工作 同一个局域网中的三台linux虚拟机,我用的是redhat6.4,如果主机是windows操作系统,可以先安装vmware workstation, 然后在workstation中装上3 ...

  3. DataTables 1.10.x与1.9.x参数名对照表

    Datatables 1.10.x在命名上与1.9.x的有区别,新版的使用的是驼峰的命名规则,而之前的是采用匈牙利命名规则 当然,这些变化都是向下兼容的,你可以继续使用旧版本的api方法的参数和名称. ...

  4. WebsphereMQ搭建集群

    #https://www.ibm.com/developerworks/cn/websphere/library/techarticles/1202_gaoly_mq/1202_gaoly_mq.ht ...

  5. (并发编程)进程 (multiprocessing--Process实现进程并发)

    ['创建进程2方式种', '进程对象属性:join方法,守护进程obj.daemon=True,obj.pid, obj.name, obj.terminate(),obj.is_alive()等 ' ...

  6. nginx实现tomcat的负载均衡及企业内部应用的代理

    192.168.3.87  mysql+redis+tomcat 192.168.3.112 nginx:6688 192.168.3.86  nginx+h5 环境准备 a.安装包  open jd ...

  7. nagios系列(六)之nagios实现对服务器cpu温度的监控

    1.安装硬件传感器监控软件sensors yum install -y lm_sensors* 2.运行sensors-detect进行传感器检测 ##一路回车即可 Do you want to ov ...

  8. DDMS调试工具

    ADT给我们提供了一个非常方便的调试工具,那就是DDMS.使用这个工具,代码调试工作也变得简单起来.我们只需要单击Eclipse界面右上方的DDMS按钮就可以切换到DDMS界面了,如图2-31所示. ...

  9. 查看Java JVM参数配置信息命令

    查看Java JVM参数配置信息命令 java -XX:+PrintCommandLineFlags jvm运行时状态的参数,可以很快找出问题所在.现在把几个命令记录一下:1. jstat这个命令对于 ...

  10. flask的orm框架(SQLAlchemy)-一对多查询以及多对多查询

    一对多,多对多是什么? 一对多.例如,班级与学生,一个班级对应多个学生,或者多个学生对应一个班级. 多对多.例如,学生与课程,可以有多个学生修同一门课,同时,一门课也有很多学生. 一对多查询 如果一个 ...