Python学习 :正则表达式
正则表达式
python 使用正则表达式(re)来进行匹配引擎搜索
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”
关于正则表达式,必须先学会它的元字符
元字符 : ^ $ * + ? { } [ ] | ( ) \
. 匹配除\n(换行符)以外的任何字符,若指定flag DOTALL,则匹配任意字符,包括换行
s = re.findall('b...u', 'www.baidu.com www')
>>> ['baidu']
^ 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
s = re.findall('^w.w', 'www.baidu.com wWw')
>>> ['www']
$ 匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
s = re.findall('w.w$', 'www.baidu.com wWw')
>>> ['wWw']
* 匹配*号前的字符0次或多次
s = re.findall('abc*', 'abccccccc')
>>> ['abcccccc']
s = re.findall('abc*', 'ab')
>>> ['ab']
+ 匹配前一个字符1次或多次
s = re.findall('abc+', 'abccccccc')
>>> ['abcccccc']
? 匹配前一个字符1次或0次
s = re.findall('abc?', 'abccccccc')
>>> ['abc']
{n} 匹配前一个字符n次,即前一个字符至少出现n次
s = re.findall('abc{2}', 'abccccccc')
>>> ['abcc']
{n,m} 匹配前一个字符n到m次
s = re.findall('abc{2,3}', 'abccccccc')
>>> ['abccc']
| 匹配|左或|右的字符
s = re.findall('abc|ABC', 'abcABC')
>>> ['abc', 'ABC']
() 提取括号中的内容
s = re.findall('(bai)', 'www.baidu.com')
>>> ['bai']
[ ] 字符集:1、[ab] 取a或b 2、字符集里的符号没有特殊的意义 3、尖角号^取反 4、选择出某种元素
# 1、[] 里面的元素取其一
s = re.findall('[aid]', 'www.baidu.com')
>>>['a', 'i','d']
# 2、消除符号的特殊意义
s = re.findall('[*]', 'abccccccc*')
>>>['*']
# 3、取反
s = re.findall('[^abc]', 'abcABC')
>>>['A', 'B', 'C']
# 4、选择元素(数字或字母)
s = re.findall('[a-z]', 'ab123c41d2ABeC')
>>>['a', 'b', 'c', 'd', 'e']
\ 反斜杠后边跟元字符去除特殊功能,反斜杠后边跟普通字符实现特殊功能
通用字符
\A 只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
\Z 匹配字符结尾,同$
\D 匹配非数字
\S 匹配任何非空白字符
\W 匹配非[A-Za-z0-9]
\d 匹配数字0-9,十进制数字
\w 匹配[A-Za-z0-9],匹配任一字母、数字、下划线
\s 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'
模式修正符,一般放在最后位置
I re.I 不区分大小写
M re.M 多行匹配,改变'^'和'$'的行为
S re.S 点任意匹配模式,改变'.'的行为
常用的匹配语法
re.findall() # 完全匹配,把所有匹配到的字符放到以列表中的元素返回
re.findall('com','www.baidu.com map.baidu.com')
>>> ['com', 'com'] re.match() # 从头开始匹配
re.match('com','www.baidu.com map.baidu.com')
>>> None re.search() # 搜索匹配,仅返回一个结果;通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
re.search('com','www.baidu.com map.baidu.com').group()
>>> com re.split() # 按照能够匹配的子串将字符串分割后返回列表。maxsplit用于指定最大分割次数,不指定使用默认值0将全部分割
re.split('\d','www.1baidu2.3com',2) # 默认为0,即全部分隔;指定次数后只分隔两次
>>> ['www.', 'baidu', '.3com']
re.split(' ','www.baidu.com map.baidu.com') # 分隔空格
>>> ['www.baidu.com', 'map.baidu.com'] re.sub() # 匹配字符并进行替换
re.sub('\d','ai','www.b1du.com ',1) # 替换一次
>>> www.baidu.com
re.subn() # 与 sub 函数完全一致,只不过其返回值是包括两个元素的元组:(new_string, number);第一个返回值 new_string 为sub 函数的结果,第二个 number 为匹配及替换的次数。
ret=re.subn('\d','ai','www.b1du.com map.b2du.com',2) # 替换两次
>>> ('www.baidu.com map.baidu.com', 2)
re 模块的两种匹配模式
贪婪模式:尽可能多的去匹配
惰性模式:尽可能少的去匹配(后面加?号来限制)
Python学习 :正则表达式的更多相关文章
- python学习——正则表达式
正则表达式 正则表达式的主要作用就是对字符串进行匹配,通过匹配,进行筛选,选择出符合规则的字符串.其实正则表达式的作用就像是一个过滤器一样.你输入好自己的 ...
- python学习 正则表达式
一.re 模块中 1.re.match #从开始位置开始匹配,如果开头没有match()就返回none 语法:re.match(pattern, string, flags=0) pattern 匹配 ...
- Python学习 ——正则表达式
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参数生 ...
- python学习-正则表达式(十)
1.查看re模块的全部属性和函数 >>>import re,pprint >>>pprint.pprint(re.__all__) ['match', 'fullm ...
- [python 学习]正则表达式
re 模块函数re 模块函数和正则表达式对象的方法match(pattern,string,flags=0) 尝试使用带有可选的标记的正则表达式的模式来匹配字符串.如果匹配成功,就返回匹配对象:如果失 ...
- 四、python学习-正则表达式
正则表达式 import re lst = re.findall(正则表达式,需要匹配的字符串) findall 把所有匹配到的字符串都搜出来,返回列表 不能把分组内容和匹配内容同时显示出来 sear ...
- Python学习笔记——正则表达式入门
# 本文对正则知识不做详细解释,仅作入门级的正则知识目录. 正则表达式的强大早有耳闻,大一时参加一次选拔考试,题目就是用做个HTML解析器,正则的优势表现得淋漓尽致.题外话不多讲,直接上干货: 1. ...
- 学习 正则表达式 js java c# python 通用
正则表达式 js java c# python 学习网站 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Globa ...
- 【Python学习笔记四】获取html内容之后,如何提取信息:使用正则表达式筛选
在能够获取到网页内容之后,发现内容很多,那么下一步要做信息的筛选,就和之前的筛选图片那样 而在python中可以通过正则表达式去筛选自己想要的数据 1.首先分析页面内容信息,确定正则表达式.例如想获取 ...
- [Python学习笔记]正则表达式总结
常用缩写字符及其含义表格查询 缩写字符分类 含义 \d 0-9的任意数字 \D 除0-9的数字以外的任何字符 \w 任何字母.数字或下划线字符(可以认为是匹配"单词"字符) \W ...
随机推荐
- [python错误]UnicodeDecodeError: 'gbk' codec can't decode byte...
出现此错误的原因是使用'gbk'解码时报错,存在一些字符不能使用gbk来解码. 首先,简体中文字符编码(ASCII扩展字符集)有下列几种:GB2312.GBK.GB18030. GB2312: 中国国 ...
- Python学习---深浅拷贝的学习
浅拷贝copy(): 修改字符串,原来的不变: 更改列表,2个同时修改,以为列表里面还涉及一个指针的索引. 简单讲就是copy()只是简单地copy了第一层,第二层不被copy 深拷贝: 需要单独的 ...
- 一句DOS命令搞定文件合并
用Dos的copy命令实现: copy a.js+b.js+c.js abc.js /b 将 a.js b.js c.js 合并为一个 abc.js,最后的 /b 表示文件为二进位文件,copy 命令 ...
- zt 设计模式六大原则(3):依赖倒置原则
下面说法对不对? 父类将算法(逻辑)封装起来,子类实现细节:这个就叫DIP(依赖倒置:Dependency Inversion Principles),模板模式就是这个原则的实现.如果在父类中加一个t ...
- NET平台微服务
.NET平台微服务项目汇集 最近博客园出现了一篇文章<微服务时代之2017年五军之战:Net PHP谁先死>,掀起了一波撕逼,作者只是从一个使用者的角度来指点江山,这个姿势是不对的.. ...
- Vue组件绑定自定义事件
Vue组件使用v-on绑定自定义事件: 可以分为3步理解: 1.在组件模板中按照正常事件机制绑定事件: template: '<button v-on:click="increment ...
- Bootstrap Multiselect
Getting Started Link the Required Files First, the jQuery library needs to be included. Then Twitter ...
- PHP Socket 简单使用
<?php /*socket收发数据 @host(string) socket服务器IP @post(int) 端口 @str(string) 要发送的数据 @back 1|0 socket端是 ...
- python中模块与包的概念
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护.为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多 ...
- Spring Bean自动注册的实现方案
这里Spring管理的Bean,可以认为是一个个的Service,每个Service都是一个服务接口 自动注册Service的好处: 1.根据指定的name/id获取对应的Service,实现简单工厂 ...