python基础-正则2
正则函数
Python提供re模块,包含所有正则表达式的功能
由于python的字符串本身也有\转义,所以需要注意:
s = "ABC\\-001"
对应的正则表达式应为:'ABC\-001'
用python的r前缀,就不用考虑转义问题
可以使用 s = r'ABC\-001'
对应的正则表达式为:'ABC\-001'
match() 判断是否匹配成功,如果匹配成功,返回一个match对象,否则返回None
test = "用户输入的字符串"
if re.match(r'正则表达式',test):
print("OK")
else:
print("failed")
结果:failed
#正则函数
import re print("---re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None")
print(re.match('www','wwwcom').group())#在起始位置匹配
print(re.match('www','comwww'))#不在起始位置匹配 print("---re.search,扫面整个字符串并返回第一个成功的匹配,后面匹配到的都不会返回")
print(re.search('baidu','www.baidu.com').group())
print(re.search('ai','www.baidu.com').group()) print("---re.findall,从左到右扫描字符串,按顺序返回匹配,如果无匹配结果则返回空列表")
#返回匹配列表;compile,编译后执行速度更快
#p = re.compile('\d+')
#print(p.findall('one1two2three3four4'))
print(re.findall('\d+','one1two2three3four4'))
print(re.findall('four','one1two2three3four4'))
结果:
---re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None
www
None
---re.search,扫面整个字符串并返回第一个成功的匹配,后面匹配到的都不会返回
baidu
ai
---re.findall,从左到右扫描字符串,按顺序返回匹配,如果无匹配结果则返回空列表
['1', '2', '3', '4']
['four']
分组:
除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用()表示的就是要提取的分组(Group)。比如:
^(\d{3})-(\d{3,8})$分别定义了两个组,可以直接从匹配的字符串中提取出区号和本地号码:
import re
m = re.match(r"^(\d{3})-(\d{3,8})$", '010-12345')
print(m)
print(m.group(0))
print(m.group(1))
print(m.group(2))
结果:
<_sre.SRE_Match object at 0x00000000026360B8>
010-12345
010
12345
如果正则表达式中定义了组,就可以在Match对象上用group()方法提取出子串来。
注意到group(0)永远是原始字符串,group(1)、group(2)……表示第1、2、……个子串
import re
print("---sub用于替换字符串中的匹配项")
#第一个参数表示正则,第二个表示替换的字符串,第三个表示要扫描的字符串
print(re.sub('g..t','abc','gaat gbbt gcct'))
print("---split,返回切割后的列表")
print(re.split('\+','123+456*789'))
结果:
---sub用于替换字符串中的匹配项
abc abc abc
---split,返回切割后的列表
['123', '456*789']
练习1:
假设有这样一个网址:http://xqtesting.sxl.cn/archive/6688431.html,
请获取这个网址的扩展名,也就是.html这个东东。
import re
print(re.findall('.html','http://xqtesting.sxl.cn/archive/6688431.html'))
结果:
['.html']
练习2:
用Python匹配HTML 标签的时候,<.*>和<.*?>有什么区别?别着急,用这两个来分别匹配
下<div><span>test</span></div>
import re
print(re.findall('<.*>','<div><span>test</span></div>'))
print(re.findall('<.*?>','<div><span>test</span></div>'))
结果:
['<div><span>test</span></div>']
['<div>', '<span>', '</span>', '</div>']
python基础-正则2的更多相关文章
- Python基础(正则、序列化、常用模块和面向对象)-day06
写在前面 上课第六天,打卡: 天地不仁,以万物为刍狗: 一.正则 - 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法: - 在线正则工具:http://tool ...
- python基础-正则1
什么是正则表达式? 正则表达式是一种小型的\高度专业化的变成语言,主要用于字符串处理 正则表达式是一种通用语言,在python中通过re模块实现,import re 工具:在线正则表达式测试 http ...
- Python基础教程【读书笔记】 - 2016/7/31
希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第十波:第10章 充电时刻 Python语言的核心非常强大,同时还提供了更多值得一试的工具.Python的标准安装包括 ...
- python基础教程笔记—即时标记(详解)
最近一直在学习python,语法部分差不多看完了,想写一写python基础教程后面的第一个项目.因为我在网上看到的别人的博客讲解都并不是特别详细,仅仅是贴一下代码,书上内容照搬一下,对于当时刚学习py ...
- Python基础-week05
本节大纲:Author:http://www.cnblogs.com/Jame-mei 模块介绍 time & datetime模块 random os sys shutil json &am ...
- python基础篇实战
1. 判断下面的结果 # 1. 判断下面的结果 # 1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 pri ...
- Python基础(协程函数、内置函数、递归、模块和包)-day05
写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04 ...
- 十八. Python基础(18)常用模块
十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...
- 十七. Python基础(17)--正则表达式
十七. Python基础(17)--正则表达式 1 ● 正则表达式 定义: Regular expressions are sets of symbols that you can use to cr ...
随机推荐
- Git-flow 基本使用方法
本文参考自:https://juejin.im/entry/5ad9a28d6fb9a07ac76e5e22 1.分支模型 master 分支:用于上线的分支,保护性分支,只包含经过测试的稳定代码,开 ...
- websocket-client connection( Long-lived )
参考:https://pypi.python.org/pypi/websocket-client/ import websocket import thread import time def on_ ...
- 16:Merge
题目描述 数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出. 输入描述:先输入键值对的个数,然后输入成对的index和value值 ...
- List集合的遍历方法
估计你永远都不会忘记这三个方法了...... public static void main(String[] args) { //超级for循环遍历方法 List<String> lis ...
- php遍历对象属性,可以使用foreach,直接打印出属性
依然遵循私有属性不可以在外访问,(不能打印出来) 但可以在内部访问这个原则.
- beego介绍
beego 简介 beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API.Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado ...
- 史上最浅显易懂的Git教程3 分支管理
假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了.如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险 ...
- Oracle JDBC 连接卡死后 Connection Reset解决过程
https://www.cnblogs.com/pthwang/p/8949445.html
- shell 获取当前svn代码目录版本号
在当前svn代码目录下执行以下命令: svn info | grep "Last Changed Rev:" | awk -F ': ' '{print $2}' > svn ...
- 【Atheros】如何禁用载波侦听CSMA和BACKOFF
无线网络上发包之前都要进行载波侦听,如果未收到ACK,就指数级退避之后重传. 有时候我们为了观察网卡在全力发送数据包时的性能,要禁用CSMA和ACK,这一篇文章先来讨论怎么禁用CSMA,这里提供两种思 ...