爬虫学习笔记3---------re库,正则表达式

Unit1 正则表达式 Re

 

正则表达式:regular expression     regex     RE

简洁的表达一组字符串的表达式,(查找,替换,匹配)。

表达“特征”(病毒,入侵)

 

使用:

  • 编译:将符合正则表达式的字符串'P(Y/YT/YTH)?N' 转换为正则表达式的特征。特征:p = re.compile('P(Y/YT/YTH)?N')

语法:

     字符+操作符

 

.[ ][^ ]*+?|
任意单个字符字符集,某一个字符非字符集,非某一个字符前一字符,0或N次重复前一字符,1或N次重复前一字符,重复 0或1次左右任意一个

 

{ m }{ m , n }^$( )\d\w
重复前一个字符m次前一m到n次(含n)开头结尾分组,内部只能有 | 操作符数字{ 0-9 }单词字符{A-Za-z0-9...}

 

举例:

经典表达

^[A-Za-z]+$           由26个字母组成的字符串

^[A-Za-z0-9]+$     由26个字母和数字组成的字符串

^-?\d+$                 整数

[1-9]\d{5}               中国境内邮政编码六位

[\u4e00-\u9fa5]     匹配中文字符(UTF-8编码)

 


 

Unit 2     Re库

Re库介绍     import re

re库采用raw string (不包含转义符的字符串)类型表示正则表达式,表示为:r'text'

如:r'[1-9]\d{5}'

一、主要函数

1、re.search( pattern, string, flags=0)

     匹配正则表达式的第一个位置,返回match对象。

  • pattern:正则表达式字符串
  • string:待匹配字符串
  • flags:控制标记
    • re.I  re.IGNORECASE    忽略正则表达式的大小写
    • re.M  re.MULTILINE    使 ^ 操作符可以匹配每行的开始
    • re.S  re.DOTALL    使 . 可以匹配所有字符,包括换行符(默认不包括)

import re

match = re.search(r'[1-9]\d{5}', 'BIT 100086')

if match:

    print(match.group(0))

#匹配结果10086

 

2、re.match( pattren, string, flags=0)

     从一个字符串的起始位置匹配,返回一个Match。

  • pattern:正则表达式字符串
  • string:待匹配字符串
  • flags:控制标记
    • re.I  re.IGNORECASE    忽略正则表达式的大小写
    • re.M  re.MULTILINE    使 ^ 操作符可以匹配每行的开始
    • re.S  re.DOTALL    使 . 可以匹配所有字符,包括换行符(默认不包括)

 

import re

match = re.search(r'[1-9]\d{5}', 'BUAA 100086')

if match:

    print(match.group(0))

#匹配结果无AttributeError: 'NoneType' object has no attribute 'group'

 

match = re.search(r'[1-9]\d{5}', '100086 BUAA')

if match:

    print(match.group(0))

#匹配结果10086

 

3、re.findall( pattern, string, flags=0)

     搜索字符串,以列表类型返回全部能匹配的子串。

  • pattern:正则表达式字符串
  • string:待匹配字符串
  • flags:控制标记
    • re.I  re.IGNORECASE    忽略正则表达式的大小写
    • re.M  re.MULTILINE    使 ^ 操作符可以匹配每行的开始
    • re.S  re.DOTALL    使 . 可以匹配所有字符,包括换行符(默认不包括)

 

>>> ls = re.findall(r'[0-9]\d{5}', 'BUAA 100086 BIT 100081')

>>> ls

['100086', '100081']

 

4、re.split( pattern, string, maxsplit=0, flags=0)

     将字符串按照正则表达式匹配结果进行分割,返回列表类型 。

  • pattern:正则表达式字符串
  • string:待匹配字符串
  • maxsplit:最大分割数,剩余部分作为最后一个元素输出
  • flags:控制标记
    • re.I  re.IGNORECASE    忽略正则表达式的大小写
    • re.M  re.MULTILINE    使 ^ 操作符可以匹配每行的开始
    • re.S  re.DOTALL    使 . 可以匹配所有字符,包括换行符(默认不包括)

 

>>> re.split(r'[0-9]\d{5}', 'BUAA 100086 BIT 100081')

['BUAA ', ' BIT ', '']

 

>>> re.split(r'[0-9]\d{5}', 'BUAA 100086 BIT 100081', maxsplit = 1)

['BUAA ', ' BIT 100081']

 

5、re.finditer( pattern, string, flags=0)

     搜索字符串,返回一个匹配结果迭代类型,每个迭代类型是match对象。

  • pattern:正则表达式字符串
  • string:待匹配字符串
  • flags:控制标记
    • re.I  re.IGNORECASE    忽略正则表达式的大小写
    • re.M  re.MULTILINE    使 ^ 操作符可以匹配每行的开始
    • re.S  re.DOTALL    使 . 可以匹配所有字符,包括换行符(默认不包括)

 

import re

for m in re.finditer(r'[0-9]\d{5}', 'BUAA 100086 BIT 100081'):

    if m:

        print(m.group(0))

###100086

###100081

 

6、re.sub( pattern, repl, string, count=0, flags=0)

     将字符串中正则表达式的子串替换,返回替换后的字符串 。

  • pattern:正则表达式字符串
  • repl:用于替换的字符串
  • string:待匹配字符串
  • count:匹配的最大替换次数
  • flags:控制标记
    • re.I  re.IGNORECASE    忽略正则表达式的大小写
    • re.M  re.MULTILINE    使 ^ 操作符可以匹配每行的开始
    • re.S  re.DOTALL    使 . 可以匹配所有字符,包括换行符(默认不包括)

 

>>> re.sub(r'[0-9]\d{5}',':zipcode', 'BUAA 100086  BIT 100081')

'BUAA :zipcode  BIT :zipcode'

 

用法总结:

 

函数式用法:一次操作

rst = re.search(r'[1-9]\d{5}', 'BUAA 100086')

 

面向对象用法:编译后多次操作

pat = re.compile(r'[1-9]\d{5}') #pattern对象

rst = pat.search('BUAA 100086')

 

7+、re.compile( pattern, flags=0)

     将正则表达式字符串形式(不是正则表达式) 编译成 正则表达式对象,Pattern对象

  • pattern:正则表达式字符串
  • flags:控制标记

Pattern对象的方法:

regex = re.compile(r'[1-9]\d{5}')

此时,可以使用 regex 的六个方法,与前 re 的方法对应。

 

二、Re库的Match对象

 

Match对象:<class '_sre.SRE_Match'>

Match对象的属性:

  • .string    带匹配的文本
  • .re          匹配时使用的pattern对象(正则表达式)
  • .pos       正则表达式搜索文件的开始位置
  • .endpos  ……结束位置

 

Match对象的方法:

  • .group(0)    获得匹配后的字符串
  • .start()        匹配字符串在原始字符串的开始位置
  • .end()         ……结束位置
  • .span()       返回(.start(), .ens())

 

三、Re库的贪婪匹配和最小匹配

 

实例:

贪婪匹配(最长匹配,默认)

match = re.search(r.'PY.*N', 'PYANBNCNDN') #有四种匹配方式,re库默认采用贪婪匹配方法。

match.group(0)

 

最小匹配,扩展 操作符

 

*?前一个字符0次或无限次扩展,最小匹配
+?前一个字符1次或无限次扩展,最小匹配
??前一个字符0次或1次扩展,最小匹配
{m,n}?扩展前一个字符m至n次(含n),最小匹配

 

注: 可看慕课或b站上 嵩天老师讲的python网络爬虫与信息提取课程

         本文为视频内容  转载自https://blog.csdn.net/youyinyou/article/details/77745097

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值