您当前的位置: 首页 >  Python

姜小孩.

暂无认证

  • 4浏览

    0关注

    51博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python爬虫之正则表达式

姜小孩. 发布时间:2022-03-10 15:21:08 ,浏览量:4

正则表达式

正则表达式就是规则表达式,在接触爬虫前,正则表达式就是用来过滤的。接触爬虫后发现真的就是过滤用的hhh。正则表达式在爬虫中的作用就是过滤出想要的字符,然后获取,如果不用正则表达式,那么就会将网页中大量信息全部爬出,造成大量内存浪费,亦不是我们最初想要爬取某些东西的初衷。

正则表达式原理

通过正则表达式我们可以实现

  1. 给定的字符串是否符合正则表达式的过滤逻辑(匹配

  2. 通过正则表达式,从文本字符串中获取我们想要的特定部分(过滤

语法介绍

正则表达式室友普通字符(a-z)以及特殊字符(“元字符”)组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。

真个则表达式的组件可以是单个字符、字符合集、字符范围、字符间的选择或者所有这些组件的任意组合。正则表达式中的字符一般分为普通字符、非打印字符、特殊字符、限定符、定位符等。

普通字符

正常能够被打印的字符

包括没有显示指定为元字符的所有可打印何不可打印字符。这包括所有大写和小写字母,所有数字,所有标点符号和一些其他符号。

正则表达式在线测试:在线正则表达式测试

注意字符串集合和字符串的区别(图一是集合,图二是字符串

非打印字符

非打印字符是打印出来,但实际看不到

\cx匹配由x指明的控制字符,如\cM匹配一个Control-M1或者回车符。X值必须为A-Z或a-z之一。否则c将是一个原意的'c'字符。\f匹配一个换页符,等价\x0c和\cI。\n匹配一个换行符,等价\x0d和\cJ。\r匹配一个回车符,等价\x0d和\cM。\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于[\f\v\r\t\v]\S匹配任何非空白字符。等价于\f\v\r\t\v\t匹配一个制表符,等价\x09个\cI\v匹配垂直制表符,等价\x0b和\cK 特殊字符

有特殊含义的字符。如果要匹配这些元素需要在字符前面加转义符,即反斜杠字符[]。

$匹配输入字符串结尾位置(有几行[]标记一个子表达式的开始和结束位置,子表达式可以获取供后面使用*匹配前面的子表达式0次或多次+匹配前面的子表达式1次或多次.匹配除换行符\n之外的任何单个字符[标记一个中括号表达式的开始?匹配前面的子表达式0次或1次,或指明一个非贪婪限定符。\讲下一个字符标记为或特殊字符、或原意字符、或向后引用、或八进制转义符。^匹配输入字符串的开始位置、除非在方括号表达式中使用,此时它表示排除该字符的集合{标记限定符表达式的开始。|指明两项之间的一个选择

和+的用法要比较来看,+比的要求更加严格 

?用法和Windows中文件搜索的?一样

管道符可以实现同时匹配,可以理解为或

限定符 *匹配前面的子表达式0次或多次。例如,zo能匹配"z"以及"zoo",等价于{0,}+匹配前面的子表达式1次或多次,例如,'zo+'能匹配"zo"以及"zoo",但不能匹配"z"。+等价于{1,}?匹配前面的子表达式0次或1次.例如"do[es]?"可以匹配"do"或"does"中的do。?等价于{0,1}{n}n是一个非负整数,匹配确定的n次。例如,'o{2}'不能匹配"BOb"中的o,但能匹配'fooooood'中所有的o。{n,}n是一个非负整数。至少匹配n次。例如'0{2,}'不能匹配"BOb"中的'o',但能匹配"foooooood"中所有的o。'0{1,}'等价于'0+'。'o{0,}'则等价于"o"{n,m}m和n均为非负整数,其中nlist[列表]

列出字符串模式中的u送头匹配项,并作为列表储存在list列表中

与re.search[]不一样的地方:

re.findall返回的是列表

re.search返回的是文本

re.findall返回的是列表,re.search返回文本

re.findall匹配多个值,re.search只要匹配到就返回,只匹配一个值

re.compile[]函数

语法:re.compile[pattern,flags=0]--->pattern object

根据包含正则表达式的字符串创建模式对象,可以实现更有效率的匹配!用了re.compile以后,正则对象会得到保留,这样在需要多次运用这个正则对象的时候效率会有较大的提升

此外,re.compile[]可以接受可选属性,常用来实现不同的特殊功能和语法变更。

MatchObject(匹配对象)方法

group[]:返回被正则匹配的字符串;

start[]:返回匹配开始的位置;

end[]:返回匹配结束的位置;

span[]:返回一个元组包含匹配(开始,结束)的位置。

re.match[]函数

语法:re.match[pattern,string,flags=0]----->match object or None

在字符串的开始位置匹配正则!如果无匹配,返回None

re.search[]函数

语法:re.search[pattern,string,flags=0]----->match object or None

re.search 函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None

re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失效,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

re.finditer[]函数

语法:re.finditer[pattern,string,flags=0]----->iterator

列出字符串中模式的所有匹配项,并作为一个迭代器(可以被for循环,可以被next遍历)返回。

re.sub[]函数

语法:re.sub[pattern,repl,string,sount=0,flags=0]--------->string

将字符串中所有pattern的匹配项用repl替换

re.subn[]函数

语法:re.subn[pattern,repl,string,count=0,flags=0]

与sub[]实现相同的替换作用,但是subn[]返回一个元组,其中包含新字符串和替换次数!

re.split[]函数

语法:re.split[pattern,string,maxsplit=0,flags=0]----->list

根据模式的匹配项来分割字符串!

关注
打赏
1652274937
查看更多评论
立即登录/注册

微信扫码登录

0.1577s