Python学习第二天之正则表达式
December 28, 2015其实是第三天了,只是那些基本语法和面向对象部分没有什么可以记录下来的,编程语言都是共通的,以前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