python第一个正则表达式

1. import re : python正则表达式模块
2. 第一个正则表达式
re.compile(r'imooc')
pattern.match('imooc python')
示例:
import re
pa = re.compile(r'imooc') #返回一个Pattern类型对象pa
ma = pa.match('imooc python') #返回一个match对象ma
print ma.group() #获得匹配结果
print ma.span() #获得匹配区间
print ma.string #匹配字符串
print ma.re #pattern对象
 
pa = re.compile(r'imooc', re.I)    # I == ignore,忽略大小写地匹配
ma = pa.match('iMoOc python')
print ma.group()
 
pa = re.compile(r'(imooc)') #加入小括号,放到group里
ma = pa.match('imooc python')
print ma.groups()
 
ma = re.match(r'imooc', 'imooc python') #直接匹配
print ma.group()
 
Python正则表达式语法
字符
匹配
.
匹配任意字符(除了\n)
[...]
匹配字符集
\d / \D
匹配数字/非数字
\s / \S
匹配空白/非空白字符
\w / \W
匹配单词字符[a-zA-Z0-9]/非单词字符
单字符匹配示例:
import re
ma = re.match(r'.', 'abc0')
print ma.group()
ma = re.match(r'{[abc]}', '{b}')
print ma.group()
ma = re.match(r'[a-z]', 'a')
print ma.group()
ma = re.match(r'\[[\w]\]', '[a]')
print ma.group()
 
字符
匹配
*
匹配前一个字符0次或无限次
+
匹配前一个字符1次或无限次
?
匹配前一个字符0次或1次
{m} / {m.n}
匹配前一个字符m次到n次
*? / +? / ??
匹配模式变为非贪婪(尽可能少匹配字符)
示例:
# -*- coding: utf-8 -*-
import re
ma = re.match(r'[A-Z][a-z]*', 'Aa')
print ma.group()
ma = re.match(r'[_a-zA-z]+[_\w]*', '_helloWorld01') #匹配一个变量名
print ma.group()
ma = re.match(r'[0-9]?[0-9]', '28') #匹配0到99
print ma.group()
边界匹配
字符
匹配
^
匹配字符串开头
$
匹配字符串结尾
\A / \Z
指定的字符串必须穿现在开头/结尾
示例:
import re
ma = re.match(r'^[\w]{4,10}@163.com$', 'imooc@163.com')
print ma.group()
ma = re.match(r'\Aimooc[\w]*', 'imooc python')
print ma.group()
分组匹配
字符
匹配
|
匹配左右任意一个表达式
(ab)
括号表达式作为一个分组
\<number>
引用编号为num的分组匹配到的字符串
(?P<name>)
分组起一个别名
(?P=name)
引用别名为name的分组匹配字符串
示例:
# -*- coding: utf-8 -*-
import re
ma = re.match(r'[0-9]?\d$|100', '100') #匹配0到100
print ma.group()
ma = re.match(r'[\w]{4,6}@(163|126).com', 'imooc@126.com')
print ma.group()
ma = re.match(r'<([\w]+>)\1', '<book>book>')
print ma.group()
ma = re.match(r'<([\w]+>)[\w]+</\1', '<book>python</book>') #
print ma.group()
ma = re.match(r'<(?P<mark>[\w]+>)[\w]+</(?P=mark)', '<book>python</book>')
print ma.group()
 
re模块的其他方法
1:search(pattern, string, flags=0)
    在一个字符串中查找匹配
2:findall(pattern, string, flags=0)
    找到匹配,返回所有匹配部分的列表
3:sub(pattern, repl, string, count, flags=0)
    将字符串中匹配正则表达式的部分替换为其他值
4:split(pattern, string, maxsplit=0, flags=0)
    根据匹配分割字符串,返回分割字符串组成的列表
示例:
import re
pa = re.compile('<[\w]+>')
ma = re.search(pa, '<a><b><c><d><efg>h<i>')
print ma.group()
pa = re.compile('<[\w]+>')
L = re.findall(pa, '<a><b><c><d><efg>h<i>')
print L
s = re.sub(r'\d+', '2016', 'I was born in 1993')
print s
 
def add1(match):        # repl位函数的sub函数
    val = match.group()
    num = int(val)+1
    return str(num)
s = re.sub(r'\d+', add1, 'I was born in 1993, you are born in 1992')
print s
 
l = re.split(r':| |,', 'imooc:C C++ Java Python,C#')
print l
 
练习
抓取网页中的图片到本地
1:抓取网页
2:抓取图片地址
3:抓取图片内容并把存到本地
 

Python正则表达式 学习笔记的更多相关文章

  1. Python 正则表达式学习笔记

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...

  2. 7.Python 正则表达式学习笔记

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...

  3. python 正则表达式 学习笔记(不断补充ing)

    本文参考了以下博客,感谢众位大神的分享! http://www.oschina.net/question/12_9507 和 http://www.crifan.com/python_re_sub_d ...

  4. Python正则表达式学习笔记

    [] 字符类,只要匹配里面的任意字符,都算匹配 . 元字符,可以匹配除换行符之外的所有字符 大小写敏感,但是可以关闭 \d  可以匹配0-9中的任意数字 {3}大括号里面的数字,边上前面一个字符匹配的 ...

  5. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  6. Python正则表达式学习摘要及资料

    摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2 ...

  7. Python Click 学习笔记(转)

    原文链接:Python Click 学习笔记 Click 是 Flask 的团队 pallets 开发的优秀开源项目,它为命令行工具的开发封装了大量方法,使开发者只需要专注于功能实现.恰好我最近在开发 ...

  8. JavaScript正则表达式学习笔记(二) - 打怪升级

    本文接上篇,基础部分相对薄弱的同学请移步<JavaScript正则表达式学习笔记(一) - 理论基础>.上文介绍了8种JavaScript正则表达式的属性,本文还会追加介绍几种JavaSc ...

  9. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

随机推荐

  1. 推荐vue.js、layer.js、axios.js

    都是很简单又很实用的东西. vue.js,前端双向绑定框架. layer.js,前端遮罩层框架.(layui的一部分,可单独使用) axios.js,异步请求框架,用起来比jQuery的ajax舒服一 ...

  2. HttpComponents-Core 学习

    HttpComponents-Core 学习 官方文档:http://hc.apache.org/httpcomponents-core-4.4.x/tutorial/html/index.html ...

  3. QTreeView 限制特定的深度、特定深度下的列 是否可以编辑

    QTreeView 限制特定的深度.特定深度下的列 是否可以编辑 # # C_TreeView # 在QTreeView基础上增加限制特定深度.特定列是否可以编辑 # class C_TreeView ...

  4. WiFidog 广告路由可修改功能更加智能化的几点看法

    海蜘蛛Tomato出了mini版,这个对很多做WiFi营销的朋友来说,是一个福音,因为可以直接从FIR302B,一台30多块钱的路由直接刷成Hi-WiFi,而且界面这么漂亮 相信很多人已经对此界面OE ...

  5. u3d 发布的程序 窗口位置的改变

    using System; using System.Runtime.InteropServices; using UnityEngine; public class WindowMOD : Mono ...

  6. SharePoint 2013 页面中window/document.onload/ready 事件不能触发的解决方案

    问题1:在SharePoint 2013页面中使用Javascript 事件window/document.onload/ready时,你会发现处理onload/ready事件的代码根本不能执行. 问 ...

  7. Allure Report使用

    https://blog.csdn.net/liuchunming033/article/details/79624474#commentBox https://blog.csdn.net/lihua ...

  8. flexible.js移动端适配安卓高分辨不兼容问题

    根据网上找到的解决办法,对于安卓设备,把dpr=1改为当前设备的dpr if (!dpr && !scale) { if (isIPhone) { // iOS下,对于2和3的屏,用2 ...

  9. Android开发学习笔记-自定义组合控件的过程

    自定义组合控件的过程 1.自定义一个View 一般来说,继承相对布局,或者线性布局 ViewGroup:2.实现父类的构造方法.一般来说,需要在构造方法里初始化自定义的布局文件:3.根据一些需要或者需 ...

  10. varchar和nvarchar的区别 数据来证明

    如果一个数据是"N好"数据类型是varchar时: select len(vartest) from testselect datalength(vartest) from tex ...