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 ...
随机推荐
- Informatic学习总结_day03_update组件学习
- java中网络设置代理
三种方式: 1.JVM启动时加参数设置代理 在系统启动时,使用-D项来设置代理. 例如: java -Dhttp.ProxyHost="proxyUrl" -Dhttp.Proxy ...
- nodejs 数据库操作,消息的发送和接收,模拟同步
var deasync = require('deasync'); //导入模板 var mysql=require('mysql'); var Stomp = require('stompjs'); ...
- centos7.2环境编译安装mysql5.5.48
一.安装cmake编译工具 跨平台编译器 查看是否已经安装了gcc # rpm -qa | grep gcc # yum install -y gcc-c++ # yum install -y cma ...
- VMware环境和Window环境进行网络连接的问题
一. 首先贴出本人在网络上找到与VMware网络连接相关的知识点 安装完虚拟机后,默认安装了两个虚拟网卡,VMnet1和VMnet8,其他的未安装(当然也可以手动安装其他的).其中VMnet1是hos ...
- K最近邻kNN-学习笔记
# -*- coding: utf-8 -*- """ Created on Thu Jan 24 09:34:32 2019 1. 翼尾花数据 2. 用 KNeighb ...
- Java基础93 JDBC连接MySQL数据库
本文知识点(目录): 1.什么是jdbc 2.jdbc接口的核心API 3.使用JDBC技术连接MySQL数据库的方法 4.使用Statement执行sql语句(DDL.DML. ...
- 测试开发之Django——No7.Django模板中的过滤器
1.add 将参数添加到值. 例如: {{ value|add:"2" }} 如果value是4,那么输出将是6. 此过滤器将首先尝试将两个值强制转换为整数.如果失败,它将尝试将值 ...
- 服务端工程师入门与进阶 Java 版
前言 欢迎加入我们.这是一份针对实习生/毕业生的服务端开发入门与进阶指南.遇到问题及时问你的 mentor 或者直接问我. 建议: 尽量用google查找技术资料. 有问题在stackoverflow ...
- C++ one more time
写在前面:我们学习程序设计的方法先是模仿,然后举一反三.在自己的知识面还没有铺开到足够解决本领域的问题时,不要将精力过分集中于对全局无足轻重的地方!!! 以下参考钱能老师的<C++程序设计教程 ...