正则表达示 for Python3
前情提要
从大量的文字内容中找到自己想要的东西,正则似乎是最好的方法.也是写爬虫不可缺少的技能.所以,别墨迹了赶紧好好学吧!
教程来自http://www.runoob.com/python3/python3-reg-expressions.html,感谢菜鸟教程.
一. 在Python3中 正则为 re 模块
import re
二.re.match函数
re.match –>从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话match()就返回none,语法:
re.match(pattern, string, flags = 0)
pattern –> 匹配正则表达式
string –>要匹配的字符串.
flags –> 标志位,用于控制正则的匹配方式,如:是否区分大小写,多行匹配等等.
匹配成功re.match方法返回一个匹配的对象,否则返回None.
可以用group(num)或groups()匹配对象函数来获取匹配表达式.
group(num = 0) –> 匹配的整个表达式的字符串,group()可以一次输入多个级号,在这种情况下它将返回一个包含那些组所对应值的元组.
groups() –> 返回一个包含所有小组字符串的元组,从1至所含的小组号.
例子:
!/usr/bin/python3
-- coding:utf-8 --
import re
print(re.match(‘www’, ‘www.runoob.com).span()) # 在起始位置匹配. –>(0, 3)
print(re.match(‘com’, ‘www.runoob.com’) # 不在起始位置匹配. –> None
例子2:
import re
line = ‘Cats are smarter than dogs’
matchObj = re.match(r'(.) are (.?) .*’, line, re.M|re.I)
if matchObj:
print(‘matchObj.group():’, matchObj.group())
print(‘matchObj.group(1):’, matchObj.group(1))
print(‘matchObj.group(2):’, matchObj.group(2))
else:
print(‘No match!!’)
三. re.search方法
re.search 扫描整个并返回第一个成功的匹配.语法:
re.search(pattern, string, flags=0) –> 参数说明和上面一样
匹配成功会返回一个匹配的对象,否则返回None.
group(num=0)和groups() 用法和上面一样.
例子:
import re
print(re.search(‘www’, ‘www.baidu.com’).span()) # 在起起始位置匹配. –> (0,3)
print(re.search(‘com’, ‘www.baidu.com’.span()) # 不在起始位置匹配. –>(11,14)
例子2:
import re
line = ‘Cats are smarter than dogs’
searchObj = re.search(r'(.) are (.?) .*’, line, re.M|re.I)
if searchObj:
print(‘searchObj.group() : ‘,searchObj.group())
print(‘searchObj.group(1) : ‘,searchObj.group(1))
print(‘searchObj.group(2) : ‘,searchObj.group(2))
四.re.match 与 re.search的区别
re.match只匹配字符串的开始,如果字符串开始不符合正则,则匹配失败,返回None.而re.search匹配整个字符串,直至找到一个匹配.
例子:
import re
line = ‘Cats are smarter than dogs’
matchObj = re.match(r’dogs’, line, re.M|re.I)
if matchObj:
print(‘match–>matchObj.group():’, matchObj.group())
else:
print(‘No match’)
matchObj = re.search(r’dogs’, line, re.M|re.I)
if matchObj:
print(‘search –> matchObj.group():’, matchObj.group())
else:
print(‘No match’)
五.检索和替换
re.sub(pattren, repl, string, count=0)
参数:
pattren–> 略
repl–>替换的字符串,也可以为一个函数.
string–>要被查找替换的原始字符串.
count–>模式匹配后替换的最大次数,默认0表示替换所有的匹配.
例子:
import re
phone = ‘2004-959-559 # 这是一个电话号码’
删除注释
num = re.sub(r’#.*$’, “”, phone)
print(‘电话号码’, num)
移除非数字的内容
num = re.sub(r’\D, “”, phone)
print(‘电话号码:’,num)
六.repl的参数是一个函数
import re
把匹配的数字*2
def double(matched):
value = int(matched.group(‘value’))
return str(value * 2)
s =‘A23G4HFD567’
print(re.sub(‘(?P\d+)’, double, s))
七.正则表达式修饰符 – 可选标志
正则表达工可以包含一些可选标志修饰符来控制匹配的械.修饰符被指定为一个可选的标志.多个标志可以通过按位OR(|)它们来指定,如re.I|re.M被设置成I和M标志:
re.l –> 例匹配对大小写不敏感.
re.L –> 做本地化识别(locale-aware)匹配
re.M –> 多行匹配,影响^和$
re.S –> 使.匹配包括换行在内的所有字符.
re.U –> 根据Unicode字符集解析字符,这个标志影响 \w , \W , \b , \B
re.X –> 通过给予你更灵活的格式以便你将正则表达式写得更易于理解.
八.正则表达式模式
模式字符串使用特殊的语法来表示一个正则:
字母和数字表示他们自身.一个正则表达式模式中的字母和数字匹配同样的字符串.
多数字母和数字前加一个反斜杠时会拥有不同的含义.
标点符号只有被黑底时才匹配自身,否则它们的表示特殊的含义.
反斜杠本身需要使用反斜杠转义
由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们.模式元素(如r’/t’ == ‘//t’)匹配相应的特殊字符.
下面列出了正则表达式模式语法中的特殊元素.如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变.
^ –> 匹配字符串的开头
$ –> 匹配字符串的末尾
. –> 匹配任意字符,除了换行符, 当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符.
[…] –> 用来表示一组字符,单独列出:[amk]匹配’a’,’m’,或’k’
[^…] –> 不在[]中的字符:[^abc]匹配除了a,b,c之外的字符.
re* –> 匹配0个或多个表达式.
re+ –> 匹配1个或多个表达式.
re? –>匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式.
re{n} –>
re{n,} –>精确匹配n个前面表达式.
re{n, m} –>匹配n到m次由前面的下面表达式定义的片段,贪婪方式
a|b –> 匹配a或b
(re) –> G匹配括号内的表达式,也表示一个组
(?imx) –> 正则表达式包含三种可选标志:i,m,x, 只影响括号中的区域.
(?-imx) –> 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。
(?:re) –> 类似 (…), 但是不表示一个组
(?imx: re) –> 在括号中使用i, m, 或 x 可选标志
(?-imx: re) –> 在括号中不使用i, m, 或 x 可选标志
(?#…) –> 注释
(?= re) –> 前向肯定界定符。如果所含正则表达式,以 … 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。
(?! re) –> 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功
(?> re) –> 匹配的独立模式,省去回溯。
\w –> 匹配字母数字
\W –> 匹配非字母数字
\s –> 匹配任意空白字符,等价于[\t\n\r\f]
\S –> 匹配任意非空字符
\d –> 匹配任意数字,等份于[0-9]
\D –> 匹配任意非数字
\A –> 匹配字符串开始
\Z –> 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串.
\z –> 匹配字符串结束
\G –> 匹配最后匹配完成的位置.
\b –> 匹配一个单词边界,也就是指单词和空格间的位置.例如,’re\b’可以匹配’never’中的’er’,但是不能匹配’verb’中的’er’
\B –> 匹配非单词边界.和\b反过来
\n \t等 –> 匹配一个换行符 制表符等
\1…\9 –> 匹配第n个分组的子表达式.
\10 –> 匹配第n个分组的子表达式,如果它经匹配,否则指的是八进制字符码的表达式
九.正则表达式实例
python –> 匹配”python“
字符类
[Pp]ython –> ‘Python’或’python’
rub[ye] –> ‘ruby’ 或’rube’
[aeiou] –> 匹配中括号内的任意一个字母
[0-9] –> 匹配任何数字 类似于[0123456789]
[a-z] –> 匹配任何小写字母
[A-Z] –> 匹配任何大写字母
[a-zA-z0-9] –> 可以匹配任何字母及数字
[^aeiou] –> 除了aeiou字母以外的所有字符
[^0-9] –> 除了数字外的字符
特殊字符类
. –> 匹配除\n这外的任何单个字符.要匹配包括\n在内的任何字符,请使用[.\n的模式]
\d \D \s \S \w \W 上面都有了
正则表达示 for Python3的更多相关文章
- PHP 正则表达示
PHP 正则表达示 php如何使用正则表达式 正则表达式基本元字符 #正则表达式示例 ^:匹配输入字符串开始的位置.如果设置了 RegExp 对象的 Multiline 属性,^ 还会与“\n”或“\ ...
- php 正则表达示中的原子
原子 原子是正则表达示里面的最小单位,原子说白了就是需要匹配的内容.一个成立的正则表达示当中必须最少要有一个原子.大理石平台精度等级 所有可见不可见的字符就是原子 说明:我们见到的空格.回车.换行.0 ...
- php正则表达示的定界符
在学习正则表达示前,我们先要来学习正则表达示的定界符. 定界符,就是定一个边界,边界已内的就是正则表达示. PHP的正则表达示定界符的规定如下: 定界符,不能用a-zA-Z0-9\ 其他的都可以用.必 ...
- 【转】SQL语句中的正则表达示
正则表达式作用是匹配方本,将一个模式(正则表达式)与一个文本串进行比较. MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定用正则表达式过滤SELECT检索出的数据. MySQL仅支持 ...
- PYTHON 正则表达示入门
确实是实践出真知,自己手打代码之后,以前停在理论上的东东,慢慢可以进入实战了. 比如,MATCH和SEARCH之间的区别. #encoding: UTF-8 import re pattern = r ...
- js正则表达test、exec和match的区别
test的用法和exec一致,只不过返回值是 true false. 以前用js很少用到js的正则表达式,即使用到了,也是诸如邮件名称之类的判断,网上代码很多,很少有研究,拿来即用. 最近开发遇到一些 ...
- 转转转---js正则表达exec与match的区别说明
正则表达式对象有两个定义方式:: 1.第一种定义: new RegExp(pattern, attributes);如var reg = new RegExp("abc",&quo ...
- Javascript正则构造函数与正则表达字面量&&常用正则表达式
本文不讨论正则表达式入门,即如何使用正则匹配.讨论的是两种创建正则表达式的优劣和一些细节,最后给出一些常用正则匹配表达式. Javascript中的正则表达式也是对象,我们可以使用两种方法创建正则表达 ...
- HttpGet协议与正则表达
使用HttpGet协议与正则表达实现桌面版的糗事百科 写在前面 最近在重温asp.net,找了一本相关的书籍.本书在第一章就讲了,在不使用浏览器的情况下生成一个web请求,获取服务器返回的内容.于 ...
随机推荐
- 封装selenium自动化框架中的截图功能
对selenium自带的截图功能进行封装: 以下为封装的代码,自定义一个.py文件即可,图片路径自己设置一个. #coding:utf-8 class Screen(object): ''' 封装的截 ...
- Thymleaf 从某处(不包含某处)开始截取字符串到末尾
简单描述:数据库存放的是id+name,但是做展示的时候,只需要展示name,不展示id.不管是在前台还是在后台,使用传统的方法截取,也是可以的,但是thymleaf提供了一种截取字符串,可以实现从某 ...
- Excel藏的很深(1)
Excel 的强大功能, 神奇! 1.快速定位数据 ctrl+g 定位条件; 或者菜单中: 查找与选择->定位条件 (1) 删除所有的错误值(ref这种) (2) 实现空格自动填充0: ctr ...
- Fiddler 抓包工具入门
转自:https://www.cnblogs.com/yyhh/p/5140852.html 序章 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操 ...
- 2018-2019-2 网络对抗技术 20165323 Exp4 恶意代码分析
一.原理与实践说明 1.实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行. 分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,s ...
- MyCat全局表和ER--笔记(三)
全局表 全局表的作用 在分片的情况下,当业务表因为规模而进行分片以后,业务表与这些附属的字典表之间的关联,就成了比较棘手的问题,考虑到字典表具有以下几个特性: 变动不频繁 数据量总体变化不大 数据规模 ...
- Service Fabric是什么?
题记:鉴于社区对Service Fabric有诸多误解,希望借本文能让大家正确了解Service Fabric是一个什么东西,算是给其正名. 术语与分类 Service Fabric不仅仅是容器编排器 ...
- SQL反模式学习笔记3 单纯的树
2014-10-11 在树形结构中,实例被称为节点.每个节点都有多个子节点与一个父节点. 最上层的节点叫做根(root)节点,它没有父节点. 最底层的没有子节点的节点叫做叶(leaf). 中间的节点简 ...
- spark ML pipeline 学习
一.pipeline 一个典型的机器学习过程从数据收集开始,要经历多个步骤,才能得到需要的输出.这非常类似于流水线式工作,即通常会包含源数据ETL(抽取.转化.加载),数据预处理,指标提取,模型训练与 ...
- UOJ#345. 【清华集训2017】榕树之心 贪心,动态规划
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ345.html 前言 我真的是越来越菜了,连树形DP都感觉陌生了. 题解 首先,我们来看看在不断生长叶子会 ...