正则表达式与python re模块 (持续补充中...)

(一)正则表达式

      Regular Expression,正则表达式,一种使用表达式的方式对字符串进行匹配的语法规则。正则表达式在信息校验,爬虫等方面应用较多。

      优点:速度快,效率高,准确性高
      缺点:不好理解

常用元字符与量词:

   	 .      	匹配除换行意外的任意字符
  	 \w     	匹配字母或数字或下划线
  	 \s     	匹配任意空白字符
   	 \d     	匹配数字
   	 \n			匹配一个换行符
     \t			匹配一个制表符

   	 ^			匹配字符串开始
   	 $			匹配字符串结尾
 	
   	 \W    		匹配非字母或数字或下划线
   	 \D			匹配非数字
   	 \S			匹配非空白符
   	 a|b		匹配字符a或字符b
  	()		匹配括号内的表达式,也表示一个组
   	[...]       匹配字符组中的字符
   	[^...]		匹配除了字符组中字符外的所有字符

      *			重复零次或更多次
	  +			重复一次或更多次
      ?			重复零次次或一次
      {n}		重复n次
	  {n,}		重复n次或更多次
	  {n,m}		重复n到m次

	  .*			贪婪匹配
      .*?			惰性匹配
      (?=.*[A-Z]) :必须包含大写字母一个

举例:
str :我的电话是10086,tom的电话是10001
reg:\d+
结果:
10086
10001

str :你今晚玩什么游戏,我想玩策略类游戏或者休闲小游戏。
reg :玩 .*? 游戏
结果: 玩什么游戏

str :你今晚玩什么游戏,我想玩策略类游戏或者休闲小游戏。
reg :玩 .* 游戏
结果: 玩什么游戏,我想玩策略类游戏或者休闲小游戏

(二)python re模块

1、findall查找所有,返回list
在这里插入图片描述

2、search会进行匹配,但是如果匹配了第一个结果,就会返回这个结果。如果匹配不上就会返回None
在这里插入图片描述

3、match只能从字符串开头进行匹配
在这里插入图片描述

4、finditer和findall差不多,只不过它返回的是迭代器对象
在这里插入图片描述
      在爬虫时,我们经常需要匹配html,下面举个简单例子:
在这里插入图片描述

<div class='(.*?)'><span id='(.*?)'>(.*?)</span></div>

     正则表达式为如上方式时,发现把整个标签都匹配下来,要是想得到class或者id亦或是标签中的内容时,正则表达怎么写呢?正则表达式可以改为如下方式:

(?P<分组名字>正则) 可以单独从正则匹配的内容中提取到内容

<div class='(?P<random_name1>.*?)'><span id='(?P<random_name2>.*?)'>(?P<random_name3>.*?)</span></div>

举一个豆瓣电影top榜的例子:
     先给出代码和正则表达式
在这里插入图片描述

// 正则表达
obj = re.compile(r'<li>.*?<img width="100" alt="(?P<movie_name>.*?)".*?</li>', re.S)

在这里插入图片描述
     我们在根据网页源代码提前需要的内容时,一般都可以使用 .*? 匹配掉不需要的内容,知道出现我们需要的内容。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白白白白白8

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值