Skip to content

Python学习第二天之正则表达式

其实是第三天了,只是那些基本语法和面向对象部分没有什么可以记录下来的,编程语言都是共通的,以前C++/C#/java的学习早已对这些基础只是烂熟于心。
Python基础部分参考 :Python菜鸟教程

由于对正则表达式不熟悉,没怎么用过,所以记录下来。
笔记来源:极客学院Python定向爬虫入门课程

注意事项:requests.get()需要导入第三方库requests

Pycharm安装第三方库:File–sitting–Project–project Interpreter –点击右边的“+”号。。选择对应的库安装

1. 常用字符

.	匹配任意字符,换行符除外(一个占位符)  
*	匹配前一个字符0次或无限次  
?	匹配前一个字符0次或1次
.*	贪心算法  
.*?	非贪心算法  
()	括号内的数据作为结果返回  

2.常用方法

findall	匹配所有符合规律的内容,并返回结果的列表  
search	匹配并提取第一个符合规律的内容,返回一个正则表达式对象(Object)  
sub	替换符合规律的内容,返回替换后的值  

3.基本示例

import re  
# from re import findall,search,S  

secret_code = 'hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'  

#.的使用举例  
# a = 'xy123'  
# b = re.findall('x...',a)  
# print b  

#*的使用举例  
# a = 'xyxy123'  
# b = re.findall('x*',a)  
# print b  


#?的使用举例  
# a = 'xy123'  
# b = re.findall('x?',a)  
# print b  

'''上面的内容全部都是只需要了解即可,需要掌握的只有下面这一种组合方式(.*?)'''  

# #.*的使用举例  
# b = re.findall('xx.*xx',secret_code)  
# print b  
# .*?的使用举例  
# c = re.findall('xx.*?xx',secret_code)  
# print c  
#  
#  
#  
# #使用括号与不使用括号的差别  
# d = re.findall('xx(.*?)xx',secret_code)  
# print d  
# for each in d:  
#     print each  

# .无法匹配换行符 re.S让"."的作用包含换行符  
# s = '''sdfxxhello  
# xxfsdfxxworldxxasdf'''  
#  
# d = re.findall('xx(.*?)xx',s,re.S)  
# print d  


#对比findall与search的区别  
# group(i) 第i个括号里面的内容  
# s2 = 'asdfxxIxx123xxlovexxdfd'  
# # f = re.search('xx(.*?)xx123xx(.*?)xx',s2).group(2)  
# # print f  
# f2 = re.findall('xx(.*?)xx123xx(.*?)xx',s2)  
# print f2[0][1]  

#sub的使用举例  
# s = '123rrrrr123'  
# output = re.sub('123(.*?)123','123%d123'%789,s)  
# print output  

#演示不同的导入方法  
# info = findall('xx(.*?)xx',secret_code,S)  
# for each in info:  
#     print each  

#不要使用compile  
# pattern = 'xx(.*?)xx'  
# new_pattern = re.compile(pattern,re.S)  
# output = re.findall(new_pattern,secret_code)  
# print output  

#匹配数字 ,(\d+)  
# a = 'asdfasf1234567fasd555fas'  
# b = re.findall('(\d+)',a)  
# print b  

4.简单应用示例

import re  

old_url = 'http://www.jikexueyuan.com/course/android/?pageNum=2'  
total_page = 20  

f = open('text.txt','r')  
html = f.read()  
f.close()  

#爬取标题  
# title = re.search('<title>(.*?)</title>',html,re.S).group(1)  
# print title  

#爬取链接  
# links = re.findall('href="(.*?)"',html,re.S)  
# for each in links:  
#     print each  

#抓取部分文字,先大再小  
# text_fied = re.findall('<ul>(.*?)</ul>',html,re.S)[0]  
# the_text = re.findall('">(.*?)</a>',text_fied,re.S)  
# for every_text in the_text:  
#     print every_text  

#sub实现翻页  
# range(a,b) 的范围是[a,b),%d类似C语言  
# for i in range(2,total_page+1):  
#     new_link = re.sub('pageNum=\d+','pageNum=%d'%i,old_url,re.S)  
#     print new_link