Python学习 ——正则表达式
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
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学习 ——正则表达式的更多相关文章
- python学习——正则表达式
正则表达式 正则表达式的主要作用就是对字符串进行匹配,通过匹配,进行筛选,选择出符合规则的字符串.其实正则表达式的作用就像是一个过滤器一样.你输入好自己的 ...
- python学习 正则表达式
一.re 模块中 1.re.match #从开始位置开始匹配,如果开头没有match()就返回none 语法:re.match(pattern, string, flags=0) pattern 匹配 ...
- python学习-正则表达式(十)
1.查看re模块的全部属性和函数 >>>import re,pprint >>>pprint.pprint(re.__all__) ['match', 'fullm ...
- [python 学习]正则表达式
re 模块函数re 模块函数和正则表达式对象的方法match(pattern,string,flags=0) 尝试使用带有可选的标记的正则表达式的模式来匹配字符串.如果匹配成功,就返回匹配对象:如果失 ...
- 四、python学习-正则表达式
正则表达式 import re lst = re.findall(正则表达式,需要匹配的字符串) findall 把所有匹配到的字符串都搜出来,返回列表 不能把分组内容和匹配内容同时显示出来 sear ...
- Python学习笔记——正则表达式入门
# 本文对正则知识不做详细解释,仅作入门级的正则知识目录. 正则表达式的强大早有耳闻,大一时参加一次选拔考试,题目就是用做个HTML解析器,正则的优势表现得淋漓尽致.题外话不多讲,直接上干货: 1. ...
- 学习 正则表达式 js java c# python 通用
正则表达式 js java c# python 学习网站 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Globa ...
- 【Python学习笔记四】获取html内容之后,如何提取信息:使用正则表达式筛选
在能够获取到网页内容之后,发现内容很多,那么下一步要做信息的筛选,就和之前的筛选图片那样 而在python中可以通过正则表达式去筛选自己想要的数据 1.首先分析页面内容信息,确定正则表达式.例如想获取 ...
- [Python学习笔记]正则表达式总结
常用缩写字符及其含义表格查询 缩写字符分类 含义 \d 0-9的任意数字 \D 除0-9的数字以外的任何字符 \w 任何字母.数字或下划线字符(可以认为是匹配"单词"字符) \W ...
随机推荐
- datatables 添加excel下载
Datatables 版本 1.10.12 和普通datatables不一样的是: 引入包 <script src="../../vendor/datatables/js/dataTa ...
- Linux input子系统简介
1.前言 本文主要对Linux下的input子系统进行介绍 2. 软件架构 图 input子系统结构图 input子系统主要包括三个部分:设备驱动层.核心层和事件层.我们可以分别理解为:具体的输入设备 ...
- Caching漫谈--关于Cache的几个理论
如今缓存是随处可见了,如果你的程序还没有使用到缓存,那可能是你的程序并发量很低,或对实时性要求很低.我们公司的ERP在显示某些报表时,每次打开都需要花上几分钟的时间,假如搜索引擎也是这么慢,我想这家搜 ...
- c语言的重构、清理与代码分析图形化浏览工具: CScout
网址: https://www.spinellis.gr/cscout/ https://www2.dmst.aueb.gr/dds/cscout/index.html https://github. ...
- ASP.NET Core Identity 实战(3)认证过程
如果你没接触过旧版Asp.Net Mvc中的 Authorize 或者 Cookie登陆,那么你一定会疑惑 认证这个名词,这太正式了,这到底代表这什么? 获取资源之前得先过两道关卡Authentica ...
- Python poll IO多路复用
一.poll介绍 poll本质上和select没有区别,只是没有了最大连接数(linux上默认1024个)的限制,原因是它基于链表存储的. 本人的另一篇博客讲了 python select : ht ...
- 560. Subarray Sum Equals K
Given an array of integers and an integer k, you need to find the total number of continuous subarra ...
- Java使用google开源工具Thumbnailator实现图片压缩
<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</ar ...
- SQL类型转换和数学函数
- LR提交JSON格式的请求
https://www.cnblogs.com/yangxia-test/p/5584317.html