基于Python爬虫的正则表达式


简述

    正则表达式又称规则表达式,是一种描述字符串匹配的模式。重点:正则匹配是一个模糊的匹配,并不是精确的匹配。

1.正则表达式——匹配单个字符与数字

匹配说明
.匹配除换行符以外的任意字符,当flags被设置为re.S时,可以匹配包含换行符以内的所有字符
[ ]   里面是字符集合,匹配[]里任意一个字符
[0123456789]匹配任意一个数字字符    
[0-9]匹配任意一个数字字符     
[a-z]匹配任意一个小写英文字母字符
[A-Z] 匹配任意一个大写英文字母字符 
[A-Za-z] 匹配任意一个英文字母字符
[A-Za-z0-9]匹配任意一个数字或英文字母字符 
[^lucky][ ]里的^称为脱字符,表示非,匹配不在[ ]内的任意一个字符
 ^[lucky]以[ ]中内的某一个字符作为开头
\d  匹配任意一个数字字符,相当于[0-9] 
\D               匹配任意一个非数字字符,相当于`[^0-9]`    
\w匹配字母、下划线、数字中的任意一个字符,相当于[0-9A-Za-z_] 
\W匹配非字母、下划线、数字中的任意一个字符,相当于`[^0-9A-Za-z_]
\s匹配空白符(空格、换页、换行、回车、制表),相当于[ \f\n\r\t]
\S匹配非空白符(空格、换页、换行、回车、制表),相当于[^ \f\n\r\t]

2.匹配锚字符

锚字符:用来判定是否按照规定开始或者结尾

匹配说明
^行首匹配,和[ ]里的^不是一个意思
$行尾匹配
\A匹配字符串的开始,和^的区别是\A只匹配整个字符串的开头,即使在re.M模式下也不会匹配其他行的行首
\Z匹配字符串的结尾,和$的区别是\Z只匹配整个字符串的结尾,即使在re.M模式下也不会匹配其他行的行尾

3.限定符

匹配说明
(xyz) 匹配括号内的xyz,作为一个整体去匹配  一个单元 子存储
x?匹配0个或者1个x,非贪婪匹配   
x*匹配0个或任意多个x
x+ 匹配至少一个x
x{n}确定匹配n个x,n是非负数
x{n,}至少匹配n个x
x{n,m}匹配至少n个最多m个x
x\|y\|表示或的意思,匹配x或y

补充:贪婪和非贪婪模式

贪婪模式:匹配尽可能多的字符

.+  匹配换行符以外的字符至少一次

.* 匹配换行符以外的字符任意次

非贪婪模式:尽可能少的匹配

.+? 匹配换行符以外的字符至少一次

.*? 匹配换行符以外的字符任意次

re模块中常用的四个方法:

  • match()
  • search()
  • findall()
  • finditer()

match()函数

原型:

def match(pattern, string, flags=0)

参数的含义:

  • pattern     匹配的正则表达式(一种字符串的模式)
  • string        要匹配的字符串
  • flags         标识位,用于控制正则表达式的匹配方式

功能:匹配成功返回匹配的对象 ,匹配失败返回 None

 获取匹配结果: 使用group()方法 获取到匹配的值

  groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

注意:从第一位开始匹配,只匹配一次
示例:

import re
res = re.match('\d{6}','12356656')   #\d 匹配任意一个数字字符,相当于[0-9]
print(res.group())
print(res.span())    #span()函数是用于字符串中搜索模式并返回匹配的起始和结束位置

search()函数

原型

def search(pattern, string, flags=0)

参数的含义:

  • pattern     匹配的正则表达式(一种字符串的模式)
  • string        要匹配的字符串
  • flags         标识位,用于控制正则表达式的匹配方式

功能:

  扫描整个字符串string,并返回第一个pattern模式成功的匹配

  匹配失败 返回 None

 注意:

  只要字符串包含就可以,只匹配一次

示例:

import re

res = re.search('[a-z]', '131A3ab889s')
print(res)
print(res.group())

match()与search()的区别:

 相同点:都只匹配一次

 不同点:

        search是在要匹配的字符串中  包含正则表达式的内容就可以
        match 必须第一位就开始匹配  否则匹配失败

findall()函数(返回列表)

原型:

 def findall(pattern, string, flags=0)

 参数的含义:

  • pattern     匹配的正则表达式(一种字符串的模式)
  • string        要匹配的字符串
  • flags         标识位,用于控制正则表达式的匹配方式

功能:

  扫描整个字符串string,并返回所有匹配的pattern模式结果的字符串列表
 

finditer()函数

原型:

  def finditer(pattern, string, flags=0)

 参数的含义:

  • pattern     匹配的正则表达式(一种字符串的模式)
  • string        要匹配的字符串
  • flags         标识位,用于控制正则表达式的匹配方式

功能:

  与findall()类似,返回一个迭代器
 

修正符

  re.I 不区分大小写匹配
re.M 多行匹配   影响到^ 和 $ 的功能
 re.S使.可以匹配换行符   匹配任意字符

功能:

    对正则进行修正

使用:

      search/match/findall/sub/subn/finditer 等函数 flags参数的使用

re.I例子:

import re
print(re.findall('[a-z]','AaBb'))
print(re.findall('[a-z]','AaBb', flags=re.I))

  re.M例子:

import re
myStr = """asadasdd1
           bsadasdd2
           csadasdd3"""
print(re.findall('^[a-z]',myStr, ))
print(re.findall('\A[a-z]',myStr))
print(re.findall('\d$',myStr))
print(re.findall('\d\Z',myStr))
# re.M
print('+++++++++++++++++++++分割线++++++++++++++++++++++++')
print(re.findall('^[a-z]',myStr, flags=re.M))
print(re.findall('\A[a-z]',myStr, flags=re.M))
print(re.findall('\d$',myStr, flags=re.M))
print(re.findall('\d\Z',myStr, flags=re.M))

re.S例子:

import re
print(re.findall('<b>.*?</b>','<b>b标签</b>'))
print(re.findall('<b>.*?</b>','<b>b标\n签</b>', flags=re.S))

补充:

split()函数

原型:

def split(patter, string, maxsplit=0, flags=0)

 参数作用:

          pattern   正则表达式

          string      要拆分的字符串

          maxsplit   最大拆分次数  默认拆分全部

          flags          修正符

作用:切割字符串
例子:

import re
myStr = "asdas\rd&a\ts12d\n*a3sd@a_1sd"
 #通过特殊字符 对其进行拆分 成列表
res = re.split("[^a-z]",myStr)
res = re.split("\W",myStr)
print(res)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值