正则表达式入门,你是如何学会正则表达式的?

正则表达式入门,你是如何学会正则表达式的?

如果你不觉得正则表达式很难读写的话,要么你是一个天才,要么,你不是地球人。正则表达式的语法很令人头疼,即使对经常使用它的人来说也是如此,包括我。

因为正则表达式也是我写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种不同的正则去测试,并思考哪些方式的效率最高,为什么?记住每个程序员都是这样一步步的实现一遍又一遍才能真正掌握正则的,包括那些大牛亦是如此。

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爬取网页信息时,经常使用的正则表达式及方法。

代码作用如下:

1.获取

标签之间内容

2.获取超链接之间内容

3.获取URL最后一个参数命名图片或传递参数

4.爬取网页中所有URL链接

5.爬取网页标题title两种方法

6.定位table位置并爬取属性-属性值

7.过滤等标签

8.获取等标签内容

1). 获取

标签之间内容

开始标签如:

、、

、...

后缀标签如:

、、

、...

核心代码:

res_tr = r'

(.*?)

'

language = '''

床前明月光 忧思独伤心 '''

# 正则表达式获取

之间内容

2). 获取超链接之间内容

在使用正则表达式时,需要分析网页链接,获取URL或网页内容。核心代码如下:

res = r'(.*?)'

mm = re.findall(res, content, re.S|re.M)

urls=re.findall(r"", content, re.I|re.S|re.M)

  

https://www.baidu.com/articles/zj.html" title="湖南省">湖南江省主题介绍

https://www.baidu.com//articles/gz.html" title="湖南省">湖南省主题介绍

'''

  

# 获取之间的内容

res = r'(.*?)'

# 获取所有链接所有内容

urls = re.findall(r"a.*?href=.*?",content,re.I|re.S|re.M)

# 获取中的URL

res_url = r"(?<=href=").+?(?=")|(?<=href=').+?(?=')"

l

3). 获取URL最后一个参数命名图片或传递参数

使用Python爬取图片过程中,会遇到图片对应的URL最后一个字段通常用于命名图片

通过该URL的"/"后面的参数命名图片

urls = 'http://i1.hoopchina.com.cn/blogfile/201411/11/BbsImg141568417848931_640*640.jpg'

value = urls.split("/")[-1]

url = 'http://localhost/test.py?a=hello&b=world'

values = url.split('?')[-1]

p

4). 爬取网页中所有URL链接

从固有网页中爬取URL链接,再进行下一步的循环爬取或URL抓取.

urls = re.findall(r'',content,re.I)

link_list = re.findall(r"(?=href=".+?(?=")|(?<=href=').+?(?=')",content)

5). 爬取网页标题title两种方法

获取网页标题也是一种常见的爬虫,常位于标题

title_pat = r'(?<=).*?(?=)'

# 方法二

title = re.findall(r'(.*?)',content)

6). 定位table位置并爬取属性-属性值

res = r'

(.*?) (.*?)

'

# 如果

包含该属性则正则表达式为r'

(.*?)

';同样如果不一定是id属性开头,则可以使用正则表达式r'

(.*?)

'

7). 过滤等标签

获取值过程中,通常会存在、

、等标签

核心代码:

res_value = r'(.*?)'

# 获取table中tr值

res_tr = r'

(.*?)

'

m_tr = re.findall(res_tr,language,re.S|re.M)

# 获取表格第一列th 属性

for line in m_tr:

res_th = r'

(.*?)

'

m_th = re.findall(res_th,line,re.S|re.M)

for mm in m_th:

if "href" in mm: # 如果获取加粗的th中含超链接则处理

restr = r''

8). 获取等标签内容

在获取游讯网图库中,图集对应的原图它是存储在script中,其中获取原图-original即可

通过正则表达式下载URL:

python爬虫有多少种方式?只会最简单的正则表达式,还有其他什么工具吗?

这里介绍一种简单的方式—BeautifulSoup,利用BeautifulSoup将爬虫获取到的html页面转化为树形结构,然后再根据需要提取标签的内容及属性,不需要正则表达式,下面我简单介绍一下BeautifulSoup安装和使用,实验环境win10+python3.6+pycharm5.0,主要内容如下:

1.安装bs4,这里直接在cmd窗口输入命令“pip install bs4”就行,如下,很快就能安装完毕:

正则表达式入门,你是如何学会正则表达式的?

2.安装成功后,我们就可以进行测试了,为了更好地说明问题,这里假设爬取的数据如下,内容比较简单:

正则表达式入门,你是如何学会正则表达式的?

对应的网页源码结构如下:

正则表达式入门,你是如何学会正则表达式的?

根据网页结构,解析代码如下,这里我是本地打开html文件,爬虫的话,直接使用requests请求对应的页面(requests.get(url)),解析的方式是一样的:

正则表达式入门,你是如何学会正则表达式的?

程序运行截图如下,已经成功获取到数据:

正则表达式入门,你是如何学会正则表达式的?

至此,我们就完成了利用BeautifulSoup来解析网页内容,整个过程不需要正则表达式。总的来说,这种方式很简单,对于常见的简单的页面来说,完全够用了(不过,正则表达式的使用范围比较广,建议还是认真学习一下),网上也有相关教程和资料,感兴趣的可以搜一下,希望以上分享的内容能对你有所帮助吧。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 xxx@163.com 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论