Python 正则表达式
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。
re 模块使 Python 语言拥有全部的正则表达式功能。
compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。
re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。
python正则是什么?
Python 大星掏出了秘密武器 --《正则心法》
学会这门独门武器,在 “爬者” 境界下将如探囊取物
“宫廷玉液酒,一百八一杯,这酒怎么样,看我给你吹”。
先看下正则测试小工具,一般人我不告诉他
http://tool.oschina.net/regex/
小试牛刀:
是不是很神奇...
来来来,Python 大星传授你一套《正则心法》
图 1
图 2
考验你悟性的时候
从《正则心法》中我们可以看到:
“斜杠 + 小写字母” 和 “斜杠 + 大写字母” 语义相反
含大写字母的一般是否定语句
这些字母不需要死记硬背,背后都有其自然规律
实在记不住,点击收藏
作为 " 爬虫英语四级” 的老玩家,小 case
w---world
s---space
d---digital
接下来
我会依次展示《正则心法》的奥秘之处
好的 “心法” 必须衬好的 “武器”
re 库 了解哈
“正则心法” 第一式 --match
当我们用《正则心法》第一式获取到匹配数据,
你以为就 over 了吗?
刁钻需求的任务:提取匹配数据中的数字
^ :匹配一行字符串的开头
s :匹配空格
d+: 匹配 1 个或多个数字
在正则表达式中使用英文括号 ()
group() 和 group(0) 会提取完整的匹配结果
group (1) 会匹配第一个括号中的子字符串
假如正则表达式后面还有 () 包括的内容,那么可以依次用 group (2)、group (3) 等来获取
“正则心法” 第二式 -- 通用匹配
Python 大星纵览群书,发现个重大密码
通配符无一例外的使用 .*
“正则心法” 第三式 -- 贪婪与非贪婪
● 什么是贪婪匹配?
在贪婪匹配下,. 会匹配尽可能多的字符
括号中是 d+,
也就是至少一个数字,并没有指定具体多少个数字,
因此,.* 就尽可能匹配多的字符,这里就把 123456 匹配了,
给 d + 留下一个可满足条件的数字 7,最后得到的内容就只有数字 7 了。
● 什么又是非贪婪匹配?
非贪婪匹配就是尽可能匹配少的字符
非贪婪匹配的写法是 .*?
贪婪匹配就是匹配尽可能多的字符
非贪婪匹配就是匹配尽可能少的字符
“正则心法” 第四式 -- 修饰符
当 content 中含有换行符或者大小写时
需要红蓝 buff 加持 --“修饰符”
跟随 Python 先打红 buff-- re.S(匹配包括换行在内的所有字符)
1234567
再打蓝 buff -- re.I(使匹配对大小写不敏感,注意:I 是 i 的大写)
1234567
“正则心法” 第五式 -- 转义匹配
说到 “转义字符”,万金油 “斜杠” 来表示
“正则心法” 第六式 --search
前面五式,我们使用的 match 方法是从字符串的开头开始匹配的,
一旦开头不匹配,那么整个匹配就失败了
Python 大星传授你新的一招 --search
在匹配时,search 方法会依次扫描字符串,直到找到第一个符合规则的字符串,然后返回匹配内容,如果搜索完了还没有找到,就返回 None。
“正则心法” 第七式 --findall
第六式 我们能轻松的用 search 方法获取匹配正则表达式的第一个内容
但是...
当我想要匹配所有符合正则表达式的所有内容呢?
['1234567', '7654321']
“正则心法” 第八式 --sub
除了使用正则表达式提取信息外,有时候还需要借助它来修改文本
Python
“正则心法” 第九式 --compile
最后,Python 传授毕生功力
准备好接收了吗?
将正则字符串编译成正则表达式对象,以便在后面的匹配中复用
呼气,吸气,收!!!
这套《正则心法》你 get 到了吗?
你是如何学会正则表达式的?
如果你不觉得正则表达式很难读写的话,要么你是一个天才,要么,你不是地球人。正则表达式的语法很令人头疼,即使对经常使用它的人来说也是如此,包括我。
因为正则表达式也是我写Python爬虫的一大利器。再大再乱的内容,哪怕是大海捞针,只要告诉我这个针的样子我都能从茫茫大海中捞出来。
至于我是怎么学会的,当然是从一开始的刷题,到后面不断的实战练习练习练习!
我要做的就是给你们推荐几个学习正则表达式的利器和网站,剩下的还是靠你们自己去完成。
第一:如果你还不知道正则表达式是什么,但是却要使用它的话。从这里可以快速入门。
- 正则表达式30分钟入门教程(http://www.cnblogs.com/hustskyking/archive/2013/06/04/RegExp.html)
- 正则表达式进阶(http://div.io/topic/764?page=1)
第二:正则表达式的相关语法,这是一张正则的语法图,可用于快速查询。不用熟记,要用的时候会查看的懂就行了。
第三:当然,用工具写更快捷。由于正则表达式难于读写,容易出错,所以我们最好一种工具在线对正则表达式进行测试。
1.Regexr
(https://regexr.com/)
2.Regx101
(https://regex101.com/
- 支持多种语言, prec,php,javascript,python,golang
- 界面美观大方
- 支持错误提示,实时匹配
3. Regulex
(https://jex.im/regulex/)
- 实时根据正则表达式绘图
- 页面加载速度快
第四:刷题,HackerRank上有一系列正则表达式的题。不用做很多,只要做几个。做完以后应该就已经掌握正则表达式的用法了。
(https://www.hackerrank.com/domains/regex/re-introduction)
还是我说的,一步一步来,不要想一步登天。程序员本来就是一个需要不断学习锻炼的职业,如果对基本概念都没有了解就开始刷题,写代码的的话,只会让自己的代码更复杂。怎么才算扎实,比如:从一个很典型的例子,去除字符串首尾的空白,尝试用5-10种不同的正则去测试,并思考哪些方式的效率最高,为什么?记住每个程序员都是这样一步步的实现一遍又一遍才能真正掌握正则的,包括那些大牛亦是如此。