python  正则表达式知识点

正则 常用符号

. : 匹配任意字符,换行符除外

* : 匹配前一个字符 0 次或者无限次

? : 匹配前一个字符 0次或者1次

.* : 贪心算法

.*? :非贪心算法

(): 括号内的数据作为结果返回

正则常用方法:

findall: 匹配所有符合规律的内容,返回包含结果的列表

Search: 匹配并提取第一个符合规律的内容,返回一个正则表达式对象

Sub: 替换符合规律的内容,返回替换后的值

正则表达式的基本应用 ,使用正则表达式过滤一个简单的test文件

test 文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<
html
>
<
head
>
    
<
meta 
charset
=
"UTF-8"
>
    
<
title
>极客学院爬虫测试</
title
>
</
head
>
<
body
>
<
div
> <
a 
href
=
"http://www.jikexueyuan.com/welcome.html"
></
a
>《python定向爬虫入门》
<
div
>
<
ul
>
    
<
li
><
a 
href
=
"http://www.jikexueyuan.com/1.html"
>这是第一条</
a
></
li
>
    
<
li
><
a 
href
=
"http://www.jikexueyuan.com/2.html"
>这是第二条</
a
></
li
>
    
<
li
><
a 
href
=
"http://www.jikexueyuan.com/3.html"
>这是第三条</
a
></
li
>
    
<
li
><
a 
href
=
"http://www.jikexueyuan.com/4.html"
>这是第四条</
a
></
li
>
</
ul
>
</
div
>
</
div
>
</
body
>
</
html
>

  

正则使用效果如下 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#coding:utf-8
import 
re
old_url
=
'http://www.jikexueyuan.com/course/web/?pageNum=2'
total_page
=
13
= 
open
(
't1.txt'
,
'r'
,encoding
=
"utf-8"
)
html 
= 
f.read()
f.close()
 
#爬取标题
title 
= 
re.search(
'<title>(.*?)</title>'
,html,re.S).group(
1
)
#使用search 找到所需要的内容,就返回
print
(title)
 
执行代码,显示如下
 
极客学院爬虫测试
 
#爬取链接
links 
= 
re.findall(
'href="(.*?)"'
,html,re.S)
print
(links)
 
执行代码,显示如下
 
[
'http://www.jikexueyuan.com/welcome.html'
'http://www.jikexueyuan.com/1.html'
'http://www.jikexueyuan.com/2.html'
'http://www.jikexueyuan.com/3.html'
'http://www.jikexueyuan.com/4.html'
]                              
 
#提取文字
text_filed 
= 
re.findall(
'<ul>(.*?)</ul>'
,html,re.S)[
0
]
print
(text_filed)
print
(
"==============================="
)
the_text 
= 
re.findall(
'">(.*?)</a>'
,text_filed,re.S)
for 
every_text 
in 
the_text:
    
print
(every_text)             
     
执行代码,显示如下 
这是第一条
这是第二条
这是第三条
这是第四条   
 
#sub 实现翻页功能  
for 
in 
range
(
7
,total_page
+
1
):
    
new_link 
= 
re.sub(
'pageNum=\d+'
,
'pageNum=%d' 
%
i,old_url,re.S)
    
print
(new_link)  
   
 
执行代码,显示如下
http:
/
/
www.jikexueyuan.com
/
course
/
web
/
?pageNum
=
7
http:
/
/
www.jikexueyuan.com
/
course
/
web
/
?pageNum
=
8
http:
/
/
www.jikexueyuan.com
/
course
/
web
/
?pageNum
=
9
http:
/
/
www.jikexueyuan.com
/
course
/
web
/
?pageNum
=
10
http:
/
/
www.jikexueyuan.com
/
course
/
web
/
?pageNum
=
11
http:
/
/
www.jikexueyuan.com
/
course
/
web
/
?pageNum
=
12
http:
/
/
www.jikexueyuan.com
/
course
/
web
/
?pageNum
=
13