加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

The website is API(3)

发布时间:2020-12-14 05:35:04 所属栏目:百科 来源:网络整理
导读:网络爬虫实战知识准备: Requests库、robots(网络爬虫排除标准)、BeautifulSoup库 一、Re正则表达式 1. 简洁地表达一组字符串 通用的字符串表达框架 字符串匹配 编译: 2.语法 字符+操作符 操作符 .:表示任何单个字符 []:字符集,对单个字符给出取值范围 [

网络爬虫实战知识准备:

Requests库、robots(网络爬虫排除标准)、BeautifulSoup库

一、Re正则表达式

1.

简洁地表达一组字符串

通用的字符串表达框架

字符串匹配

编译:

2.语法

字符+操作符

操作符

.:表示任何单个字符

[]:字符集,对单个字符给出取值范围

[^]:非字符集,对单个字符给出排除范围

*:前一个字符0次或无限次扩展

+:前一个字符1次或无限次扩展

?:前一个字符0次或1次扩展

|:左右表达式任意一个

{m}:扩展前一个字符m次

{m,n}:扩展前一个字符m至n次(含n)

^:匹配字符串开头

$:匹配字符串结尾

():分组标记,内部只能用|操作符

d:数字,等价于[0-9]

w:单词字符串,等价于[A-Za-z0-9_]

经典正则表达式实例

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

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

^-?d+$ 整数形式的字符串

^[0-9]*[1-9][0-9]*$ 正整数形式的字符串

[u4e00-u9fa5] 匹配中文字符串

?3.Re库介绍

re.search(pattern,string,flags=0):在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象

?flags控制标记

re.I 忽略正则表达式的大小写

re.M 正则表达式中的^操作符能够将给定字符串的每行当作匹配开始

re.S 正则表达式中的.操作符能够匹配所有字符,默认匹配除换行外的所有字符

>>> import re
>>> match = re.search(r[1-9]d{5},BIT 100081)
>>> if match:
    print(match.group(0))

    
100081

re.match(pattern,flags):从一个字符串的开始位置起匹配正则表达式,返回match对象

>>> match = re.match(r[1-9]d{5},BIT 100081)
>>> if match:
    print(match.group(0))

    
>>> match.group(0)
Traceback (most recent call last):
  File "<pyshell#9>",line 1,in <module>
    match.group(0)
AttributeError: NoneType object has no attribute group

>>> match = re.match(r‘[1-9]d{5}‘,‘100081‘)
>>> match.group(0)
‘100081‘

re.findall(pattern,flags):搜索字符串,以列表类型返回全部能匹配的子串

>>> ls = re.findall(r[1-9]d{5},BIT100081 NPU100084)
>>> ls
[100081,100084]

re.split(pattern,maxsplit=0,flags=0):将一个字符串按照正则表达式匹配结果进行分割,返回列表类型

maxsplit:最大分割数

>>> re.split(r[1-9]d{5},BIT100081 NPU100084)
[BIT, NPU,‘‘]
>>> re.split(r[1-9]d{5},BIT100081 NPU100084,maxsplit = 1)
[BIT, NPU100084]

re.finditer(pattern,flags):搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象

>>> for m in re.finditer(r[1-9]d{5},BIT100081 NPU100084):
    if m:
        print(m.group(0))

        
100081
100084

re.sub(pattern,rel,count,flags):在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

repl:替换匹配字符串的字符串

count:匹配的次数

>>> re.sub(r[1-9]d{5},:zipcode,BIT100081 NPU100084)
BIT:zipcode NPU:zipcode

re.compile(pattern,flags)

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

regex.search().......

这是面向对象的编译方法

?4.Re库的match对象

属性:

.string 待匹配的文本

.re 匹配时使用的pattern对象(正则表达式)

.pos 正则表达式搜索文本的开始位置

.endpos .....结束位置

方法:

.group(0) 获得匹配后的字符串

.start() 匹配字符串在原始字符串的开始位置

.end() 。。。。。结束位置

.span() 返回(.start(),.end())

>>> import re
>>> m = re.search(r[1-9]d{5},NPU100081 NPU100084)
>>> m.string
NPU100081 NPU100084
>>> m.re
re.compile([1-9]d{5})
>>> m.pos
0
>>> m.end
<built-in method end of re.Match object at 0x03CEED40>
>>> m.endpos
19
>>> m.group(0)
100081
>>> m.group(1)
Traceback (most recent call last):
  File "<pyshell#8>",in <module>
    m.group(1)
IndexError: no such group
>>> m.start()
3
>>> m.end()
9
>>> m.span()
(3,9)

?贪婪匹配:默认输出最长匹配

>>> match = re.search(rPY.*N,PYANBNCNDN)
>>> match.group(0)
PYANBNCNDN

最小匹配

>>> match = re.search(rPY.*?N,PYANBNCNDN)
>>> match.group(0)
PYAN

*?前一个字符0次或无限次扩展

+?前一个字符1次或无限次扩展

???前一个字符0次或1次扩展

{m,n}? 扩展前一个字符m至n次

>>> match = re.search(rPY.+?N,PYANBNCNDN)
>>> match.group(0)
PYAN

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读