python爬虫之正则表达式回顾

前面使用正则表达式匹配了文本及属性,提取到了想要的内容,学习完之后,来回顾总结总结。

表达式的匹配规则:

\w 匹配字母、数字及下划线
\W 匹配不是字母、数字及下划线的字符
\s 匹配任意空白符,等价于[\t \n \r \f]
\S 匹配任意非空字符
\d 匹配任意数字,等价于[0-9]
\D 匹配任意非数字的字符
\A 匹配字符串开头
\Z 匹配字符串结尾,如果存在换行,只匹配换行前的结束字符串
\z 匹配字符产结尾,如果存在换行,同时还会匹配换行符
\G 匹配最后匹配完成的位置
\n 匹配一个换行符
\t 匹配一个制表符
^ 匹配一行字符串的开头
$ 匹配一行字符串的结尾
. 匹配任意字符,除了换行符,当re.DOTALL标志被指定时,则可以匹配包括换行符的任意字符
[…] 用来表示一组字符,单独列出,比如[amk]匹配a、m或k
[^…] 不在[ ]中的字符,比如[^abc]匹配除了a、b、c之外的字符
(*) 星号表示匹配0个或多个表达式
(+) 加号表示匹配一个或多个表达式
? 匹配0个或1个前面的正则表达式定义的片段,非贪婪方式
{n} 精确匹配n个前面的表达式
{n,m} 匹配n到m次由前面正则表达式定义的片段,贪婪方式
a|b 匹配a或b
( ) 匹配括号内的表达式,也表示一个组

match( )匹配方式

match()方法匹配,匹配方式为从头开始匹配,如果匹配则返回匹配成功的结果,一旦开头不对,则返回None,使用少。
实例:

#入re模块
import re
#自己写的一段代码
cntent= 'this is python 321 456'
#使用match方法匹配文本,^表示匹配以字符产开头,.*表示匹配任意字符
item = re.match('^this.*',cntent)
print(item)

贪婪匹配与非贪婪匹配

在贪婪匹配,.*会匹配尽可能多的字符。
输出的结果就只有数字3
实例:

#导入re模块
import re
#自己写的一段文本
cntent= 'this 123 is python yes'
item = re.match('^th.*(\d+).*yes$',cntent)
print(item)
print(item.group(1))

非贪婪匹配,点号星号问号就尽可能匹配少的字符。
实例:

#导入re'模块
import re
#自己写的一段文本
cntent= 'this 123 is python yes'
#当采用非贪婪匹配时,则匹配尽可能少字符,输出结果为123
item = re.match('^th.*?(\d+).*?yes$',cntent)
print(item)
print(item.group(1))

在做匹配时,字符串中间尽可能使用非贪婪匹配。

修饰符

re.I		使匹配对大小写不敏感
re.L		做本地化识别(locale-aware)匹配
re.M		多行匹配,影响^和$
re.S		使.匹配包括换行在内的所有字符
re.U		根据Unicode字符集解析字符。这个标志影响\w、\W、\b、\B
re.X		该标志通过给予你更灵活的格式以便你将正则表达式写的更易于理解

在网页匹配中,较为常用的为re.S和re.I

转义字符

当匹配的内容中包含有 . 时,如果再用之前的匹配则可能匹配出错,此时就要用到转义字符。
实例:

#导入re模块
import re
#一段文本
text = "www.csdn.com"
#使用\.匹配.
item = re.match('www\.csdn\.com$',text)
print(item)

当要匹配 . 时,使用反斜杠 . 则可以匹配到 . 号。

search()

search()方法会扫描整个字符串,然后返回第一个成功匹配的结果。如果没有找到匹配内容,则返回None。
实例:

#导入re模块
import re
#一段文本
text = 'I am a student 123 and study python '
item = re.search('am.*?(\d+).*?python',text)
print(item)

findall()

如果想要匹配整片文本的想要的内容,就需要使用findall()方法来匹配,findall会搜索整个文本内容,返回全部匹配到的结果。
实例:可参考
https://blog.csdn.net/qq_46292926/article/details/104394668

sub()

如果想要把字符串中的数字去掉,可以借助sub()方法
实例:

#导入re模块
import re
#一段文本
text = 'I am a student 123 and study python '
#sub方式去掉数字
item = re.sub('\d+','',text)
print(item)

compile()

compile()可以将正则字符串编译成正则表达式对象,以便在后面的匹配中复用。
实例:可参考
https://blog.csdn.net/qq_46292926/article/details/104394668

发布了18 篇原创文章 · 获赞 14 · 访问量 1295

猜你喜欢

转载自blog.csdn.net/qq_46292926/article/details/104440333
今日推荐