正则函数

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的更多相关文章

  1. Python基础(正则、序列化、常用模块和面向对象)-day06

    写在前面 上课第六天,打卡: 天地不仁,以万物为刍狗: 一.正则 - 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法: - 在线正则工具:http://tool ...

  2. python基础-正则1

    什么是正则表达式? 正则表达式是一种小型的\高度专业化的变成语言,主要用于字符串处理 正则表达式是一种通用语言,在python中通过re模块实现,import re 工具:在线正则表达式测试 http ...

  3. Python基础教程【读书笔记】 - 2016/7/31

    希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第十波:第10章  充电时刻 Python语言的核心非常强大,同时还提供了更多值得一试的工具.Python的标准安装包括 ...

  4. python基础教程笔记—即时标记(详解)

    最近一直在学习python,语法部分差不多看完了,想写一写python基础教程后面的第一个项目.因为我在网上看到的别人的博客讲解都并不是特别详细,仅仅是贴一下代码,书上内容照搬一下,对于当时刚学习py ...

  5. Python基础-week05

    本节大纲:Author:http://www.cnblogs.com/Jame-mei 模块介绍 time & datetime模块 random os sys shutil json &am ...

  6. python基础篇实战

    1. 判断下面的结果 # 1. 判断下面的结果 # 1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 pri ...

  7. Python基础(协程函数、内置函数、递归、模块和包)-day05

    写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04  ...

  8. 十八. Python基础(18)常用模块

    十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...

  9. 十七. Python基础(17)--正则表达式

    十七. Python基础(17)--正则表达式 1 ● 正则表达式 定义: Regular expressions are sets of symbols that you can use to cr ...

随机推荐

  1. WPF非UI线程中调用App.Current.MainWindow.Dispatcher提示其他线程拥有此对象,无权使用。

    大家都知道在WPF中对非UI线程中要处理对UI有关的对象进行操作,一般需要使用委托的方式,代码基本就是下面的写法 App.Current.MainWindow.Dispatcher.Invoke(ne ...

  2. PHP第四课 了解经常使用的函数

    学习概要: 一.语言结构 二.自己定义函数 三.变量作用域 四.静态变量 五.函数返回值 六.參数 七.默认參数 八.引用參数 九.可变个数函数 十.回调函数 十一.变量函数 十二.递归函数 十三.文 ...

  3. FullPage.js 活动单页 - 全屏滚动插件

    插件描述:fullPage.js 是一个基于 jQuery 的插件,它能够很方便.很轻松的制作出全屏网站. https://www.uedsc.com/fullpage.html 官网 如今我们经常能 ...

  4. 【转载】【selenium+Python WebDriver】之selenium的定位以及切换frame(iframe)

    感谢CSDN:huilan_same大神 网页地址:http://blog.csdn.net/huilan_same/article/details/52200586

  5. 深入Asyncio(五)Event Loop

    Event Loop loop除了处理协程间的切换与结束时的异常捕捉,还要监听socket和文件描述符.先做个小测试: >>> import asyncio >>> ...

  6. Docker入门系列8

    commit docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser ...

  7. eclipse maven安装配置

      下载在Apache下载Maven,下载地址:http://maven.apache.org/download.html,在win7下载文件为:apache-maven-3.1.0-bin.zip. ...

  8. 异常: 2 字节的 UTF-8 序列的字节 2 无效。

    具体异常: 十二月 08, 2015 7:16:55 下午 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.servi ...

  9. Android:实现两个Activity相互切换而都不走onCreate()

    本文要实现的目的是: 有3个Activity: A,B,C.从A中能够进入B,B中能够进入C.而且B和C之间可能须要多次相互切换,因此不能使用普通的startActivity-finish方式,由于又 ...

  10. python 基础 2.1 if 流程控制(一)

    一.if  else 1.if 语句     if expression:   //注意if后有冒号,必须有        statement(s)     //相对于if缩进4个空格 注:pytho ...