Python基础—15-正则表达式
正则表达式
应用场景
- 特定规律字符串的查找替换切割等
- 邮箱格式、URL、IP等的校验
- 爬虫项目中,特定内容的提取
使用原则
- 只要是能够使用字符串函数解决的问题,就不要使用正则
- 正则的效率较低,还会降低代码的可读性
- 世界上最难理解的三样东西:医生的处方、道士的神符、码农的正则
- 提醒:正则是用来写的,不是用来读的;在不知道功能的情况下,不要试图阅读别人的正则。
基本使用
说明:正则的解析处理是由
re模块完成相关函数:
- match:从开头进行匹配,匹配到就返回正则结果对象,没有就返回None
- search:从任意位置匹配,匹配到一次就返回,没有就返回None
import re # 只从开头匹配,找到返回一个正则结果对象,没有找到返回None
# m = re.match('abc', 'abcsdhasdasjabcweuqo')
# 全部匹配,只要找到就停止并返回
m = re.search('abc', 'sdhabcsdasjabcweuqo') if m:
# 提取匹配到的内容
print(m.group())
# 获取匹配位置
print(m.span())- findall:全局匹配,返回匹配到的结果列表,没有时返回空列表
# 匹配所有内容,返回匹配结果组成的列表,若没有则返回空列表
f = re.findall('abc', 'qwsdhaslabcsadjlasdoiabcdakls')
if f:
print(f)
print(type(f))- compile:生成正则表达式对象
# 生成正则表达式对象,用于正则匹配
c = re.compile('hello') # 从开头进行匹配
# m = c.match('hellosdsjldkabc')
# 从任意位置匹配
m = c.search('shdjkhelloaskjdha')
if m:
print(m.group())
# 匹配所有
f = c.findall('helloasjdhakhello')
if f:
print(f)将正则的匹配分两步完成:先创建正则对象,然后通过对象的match、search、findall方法完成匹配
正则规则
单个字符:
普通字符:简单来说就是一对一的完全匹配
[]:中间的任意一个字符
[a-z]:a~z之间的字符(所有小写字母)
[0-9]:0~9之间的字符(所有数字)
[A-Z0-9]:所有的大写字母和数字
[^abc]:除abc外的所有字符
. :匹配'\n'以外的任意字符
\d:所有的数字,等价于[0-9]
\D:所有的非数字,等价于[^0-9]
\w:所有的数字、字母(中文)、下划线等(就是字)
\W:所有的非字字符(\w的取反)
\s:所有的空白字符(\n、\t、\t、空格等)
\S:所有的非空白字符
\b:词边界匹配(开头、结尾、标点、空格)
\B:非词边界匹配次数控制
*:前面的字符出现任意次
+:前面的字符出现至少一次
?:前面的字符出现至多一次
{m}:指定次数,m表示出现的次数
{m,}:至少指定次数
{m,n}:指定范围内的次数,m到n次之间
{,n}:至多n次,相当于{0,n}正则的匹配默认都是贪婪的(最大限度的匹配)
边界限定
- ^:以指定的内容开头
- $:以指定的内容结尾
- 示例
import re # 以指定的内容开头
# c = re.compile(r'^abc')
# 以指定的内容结尾
c = re.compile(r'kas$') s = c.search('abcsdhkas') if s:
print(s.group())优先级控制
- |:表示或,它拥有最低的优先级
- ():用于表示一个整体,明确的指定优先级
- 示例:
import re c = re.compile(r'a(hello|world)b') s = c.search('aworldb') if s:
print(s.group())分组匹配
- 说明:()不但可以作为一个整体,还可以进行分组匹配
- 示例1:
import re c = re.compile(r'(\d+)([a-z]+)(\d+)') s = c.search('shd327sjahdajhsd87892ehawksd') if s:
print(s.group())
# 默认就是全部的匹配内容,等价于上式
print(s.group(0))
# 第一个()匹配到的内容
print(s.group(1))
print(s.group(2))
print(s.group(3))
print(s.span())
print(s.span(0))
print(s.span(1))
print(s.span(2))
print(s.span(3))- 示例2:给分组起名字
import re # 固定匹配
# c = re.compile(r'<div><a>\w+</a></div>')
# \1表示前面第一个小括号匹配的内容
# c = re.compile(r'<([a-z]+)><([a-z]+)>\w+</\2></\1>')
# 给()起名字
c = re.compile(r'<(?P<goudan>[a-z]+)><(?P<ergou>[a-z]+)>\w+</(?P=ergou)></(?P=goudan)>') s = c.search('<div><a>百度一下</a></div>') if s:
print(s.group())贪婪匹配
- 贪婪:最大限度的匹配叫贪婪。正则的匹配默认是贪婪。
- 非贪婪:只要满足匹配条件,能少匹配就少匹配;通过可以使用'?'进行取消贪婪
- 示例:
import re # 取消任意多次的贪婪
# c = re.compile(r'a.*?b')
# 取消至少一次的贪婪
c = re.compile(r'a.+?b') s = c.search('abdhsadjbsdjabs') if s:
print(s.group())匹配模式
- 说明:所谓模式就是对匹配的原则进行整体的修饰
- 示例:
import re # 忽略大小写的匹配
# c = re.compile(r'hello', re.I)
# s = c.search('Hello world') # 进行多行匹配,默认单行匹配
# c = re.compile(r'^hello', re.M)
# s = c.search('world \nhello') # 做为单行处理 或 让 . 能够匹配 \n
c = re.compile(r'<div>.*?</div>', re.S)
# string = '<div>hello</div>'
string = '''<div>
hello
</div>'''
s = c.search(string) if s:
print(s.group())字符转义
- 若匹配正则语法中的特定字符都需要进行转义
- 正则字符串会被处理两次,python中处理一次,re模块会在处理一次
- 若不想考虑字符的转义问题,可以在书写正则字符串时前面加一个字符'r'
- 添加'r'之后,在python不会再进行任何转义,只需在与正则语法相关的字符前加''即可让其使用原有意义
Python基础—15-正则表达式的更多相关文章
- 十七. Python基础(17)--正则表达式
十七. Python基础(17)--正则表达式 1 ● 正则表达式 定义: Regular expressions are sets of symbols that you can use to cr ...
- 十五. Python基础(15)--内置函数-1
十五. Python基础(15)--内置函数-1 1 ● eval(), exec(), compile() 执行字符串数据类型的python代码 检测#import os 'import' in c ...
- Python基础之 正则表达式指南
本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...
- python基础之正则表达式
正则表达式语法 正则表达式 (或 RE) 指定一组字符串匹配它;在此模块中的功能让您检查一下,如果一个特定的字符串匹配给定的正则表达式 (或给定的正则表达式匹配特定的字符串,可归结为同一件事). 正则 ...
- Python高手之路【五】python基础之正则表达式
下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...
- python基础之正则表达式和re模块
正则表达式 就其本质而言,正则表达式(或 re)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 ...
- python基础之 正则表达式,re模块
1.正则表达式 正则表达式:是字符串的规则,只是检测字符串是否符合条件的规则而已 1.检测某一段字符串是否符合规则 2.将符合规则的匹配出来re模块:是用来操作正则表达式的 2.正则表达式组成 字符组 ...
- python基础-RE正则表达式
re 正则表示式 正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写 ...
- python基础之正则表达式。
简介 就其本质而言,正则表达式是内嵌在python内,由re模块实现,小型的专业化语言,最后由c写的匹配引擎执行.正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来 ...
- Python开发【第一篇】Python基础之正则表达式补充
正则表达式 一简介:就其本质而言,正则表达式(或RE)是一种小型的.高度专业化的标称语言,(在Python中)它内嵌在Python中,并通过re模块实现.正则表达式模式被编译成一系列的字节码,然后由用 ...
随机推荐
- 从数组去重这个函数来体验es6的高效率
前几天碰到一个题目,要求是这样的. 题目描述 为 Array 对象添加一个去除重复项的方法 示例1 输入 [false, true, undefined, null, NaN, 0, 1, {}, { ...
- CssClass初步语法了解
首先 创建Css有三种方法 这里面就不一一介绍了,主要说第二种 创建第二种Css样式表 要在标签<title><title>标签下面写 如: <style type= ...
- TensorFlow入门:mac 安装 TensorFlow
开发环境: mac os 10.12.5 Python 2.7.10 GCC 4.2.1 mac默认是不带pip的,安装pip. sudo easy_install pip 1.安装virtualen ...
- 自动化运维与Saltstack
一.自动化运维介绍 1.自动化运维产生背景 传统的IT运维是将数据中心中的网络设备.服务器.数据库.中间件.存储.虚拟化.硬件等资源进行统一监控,当资源出现告警时,运维人员通过工具或者基于经验进行 ...
- vue+mock.js+element-ui模拟数据搞定分页
效果如图: 前提是搭好vue前端框架,npm install mockjs引入mock.js 当前页全部代码如下,其他有关element-ui的引入未提到,仅作参考用 <!-- 用户管理 --& ...
- AngularJS Toaster的简单介绍
github地址: https://github.com/jirikavi/AngularJS-Toaster 参考博客: https://www.cnblogs.com/youzhuxiaoyao/ ...
- matlab练习程序(生成黑白网格)
提供了两种生成方法,一个是自己编程实现,比较灵活:另一个是调用系统的checkerboard函数,似乎只能生成8*8网格. 至于用途,也许可以用来下国际象棋. 自己函数生成: 系统函数生成: 代码如下 ...
- java面试题之----JVM架构和GC垃圾回收机制详解
JVM架构和GC垃圾回收机制详解 jvm,jre,jdk三者之间的关系 JRE (Java Run Environment):JRE包含了java底层的类库,该类库是由c/c++编写实现的 JDK ( ...
- tp5.0:替换修改js、css等样式文件路径
首先, 我们要知道,TP5已经不支持绝对路径访问样式文件啦!所以我们不必去花时间去找使用$_SERVER来获取 手册位置:模板->内置标签->资源文件加载 方法一: 过程: 1.首先在模块 ...
- Orchard Core 文档翻译 (三) Orchard Core Modules
原文连接:https://www.cnblogs.com/Qbit/p/9746442.html 转载请注明出处 介绍 Orchard Core Modules库提供了一种机制,可以拥有一个独立的模块 ...