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到了吗?