Python网络爬虫之正则表达式

正则表达式非Python独有,在Python中通过re库模块实现。

下面是一些常见的匹配模式

re.match

re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

最常规的匹配

import re

content = "Hello 1234567 World_This is a Demo"

print(content)

result = re.match("^Hello\s\d\s\w.*Demo$",content)

print(result)

print(result.group()) #匹配结果

print(result.span()) #整个字符串全匹配

泛匹配

import re

content = "Hello 1234567 World_This is a Demo"

result = re.match("^Hello.*Demo$",content)

print(result)

print(result.group()) #匹配结果

print(result.span()) #整个字符串全匹配

匹配目标

import re

content = "Hello 1234567 World_This is a Demo"

result = re.match("^Hello\s(\d+)\sWorld.*Demo$",content)

print(result)

print(result.group(1)) #匹配第一个括号内的结果

print(result.span()) #整个字符串全匹配

贪婪匹配

import re

content = "Hello 1234567 World_This is a Demo"

result = re.match("^He.*(\d+).*Demo$",content)

print(result)

print(result.group(1)) #匹配结果只是最后的一个数字7

print(result.span()) #整个字符串全匹配

非贪婪匹配

import re

content = "Hello 1234567 World_This is a Demo"

result = re.match("^He.*?(\d+).*Demo$",content)

print(result)

print(result.group(1)) #匹配结果是1234567,关键在于'?'

print(result.span()) #整个字符串全匹配

匹配模式

import re

content = "Hello 1234567 World_This

is a Demo"

result = re.match("^He.*?(\d+).*Demo$",content,re.S)

print(result)

print(result.group(1)) #匹配结果是1234567

print(result.span()) #整个字符串全匹配

转义

import re

content = "prices is $5.00"

result = re.match("prices is \$5\.00",content)

print(result) #需要使用转义符

总结:尽量用使用泛匹配,使用括号的到匹配目标,尽量使用非贪婪模式,有换行符就用re.S

re.search

re.search扫描整个字符串并返回第一个成功的匹配(不需要开头和结尾的匹配)

search(正则规则,匹配串,有换行符就加上re.S)

import re

content = "Hello 1234567 World_This is a Demo"

result = re.search("^He.*?(\d+).*Demo$",content)

print(result.group(1)) #匹配结果是1234567

re.findall

搜索字符串,以列表形式返回所有能匹配的子串

search是查找一个,findall是查找所以的,下面来看一下具体的使用

search返回的是一个,而findall返回的是list

import re

html = '"

二珂《带着音..

Scream - Mic

薛之谦

周杰伦

李宗盛

成都

"'

result = re.search('

.*?href="(.*?)">(.*?)',html,re.S)

print(result)

if result:

print(result.group(1), result.group(2))

import re

html = '"

二珂《带着音..

Scream - Mic

薛之谦

周杰伦

李宗盛

成都

"'

results = re.findall('

.*?href="(.*?)">(.*?)',html,re.S)

print(results)

for result in results:

print(result)

re.sub

替换字符串中每一个匹配的的子串后返回替换后的字符串

sub(要替换的子串,替换成的子串,替换字符串)

import re

content = "Hello 1234567 World_This is a Demo"

result = re.sub('\d+','',content)

print(result)

re.compile

将正则字符串编译成正则表达式对象(将一个正则表达式串编译成正则对象,以便于复用该匹配模式)

import re

content = "Hello 1234567 World_This is a Demo"

patten = re.compile('Hello.*Demo',re.S)

result = re.search(patten,content)

print(result)

这里要注意re.S的使用,只能在compile中复制模式,到其它方法去匹配

本文来自企鹅号 - 数据分析员媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jack的Android之旅

疯狂Java笔记之对象及其内存管理

类体内定义的变量被称为成员变量〔英文是Field)。如果定义该成员变量时没有使用static 修饰,该成员变量又被称为非静态变量或实例变量;如果使用了stat...

8630
来自专栏cs

冒泡排序,选择排序,插入排序算法

冒泡排序 思路:二二交换,可以让最大的数沉底,在length-1次,就有序了 package day20180315; public class Maopao...

36470
来自专栏用户2442861的专栏

java中的内部类总结

http://www.cnblogs.com/nerxious/archive/2013/01/24/2875649.html

9630
来自专栏别先生

Scala学习教程笔记二之函数式编程、Object对象、伴生对象、继承、Trait、

1:Scala之函数式编程学习笔记: 1:Scala函数式编程学习: 1.1:Scala定义一个简单的类,包含field以及方法,创建类的对象,并且调用...

32660
来自专栏黑泽君的专栏

java基础学习_基础语法(下)01_day05总结

============================================================================= ==...

10010
来自专栏码云1024

c++ 深入理解虚函数

58660
来自专栏Brian

C++11基础学习系列二

---- 概述 在C++11基础学习系列一中介绍一些c++11一些基础知识。基础学习系列二进一步讲解C++11. string string不可思议,在C++中...

26950
来自专栏ml

关于如何来构造一个String类

  今天帮着一位大二的学弟写了一个String的类,后来一想这个技术点,也许不是什么难点,但是还是简单的记录一些吧! 为那些还在路上爬行的行者,剖析一些基本的实...

37750
来自专栏互联网杂技

javascript大法好,不用记

数组的操作 ---- Array.prototype.toString ( ) 把数组转变为字符串,返回字符串,arr.toString(); ---- Arr...

37570
来自专栏LeetCode

LeetCode 169. Majority Element

思路:数组中有一个数字的出现次数超过一半,也就是说这个数字的出现次数比其他的所有的数字的出现次数之和还要多。因此我们可以考虑遍历数组的时候保存两个值,一个是数组...

13210

扫码关注云+社区

领取腾讯云代金券