【Python3 爬虫】U15_正则表达式

1.什么是正则表达式?

通俗解释:按照某个规则,从某个字符串中匹配出想要的数据。
官方解释:正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。

2.匹配单个字符(常用)

2.1 匹配某个字符串

匹配某个字符串,指定一个字符,如he,从hello中匹配

import re
text='hello'
ret = re.match('he',text)
print(ret.group())

打印结果:he

2.2 .匹配任意的字符

import re
text = 'abcdrf'
ret = re.match('.',text)
print(ret.group())

打印结果:a

2.3 \d匹配任意的数字(0-9)

import re
text = '123'
ret = re.match('\d',text)
print(ret.group())

打印结果:1

2.3 \D匹配任意的非数字(与\d作用相反)

import re
text = 'abc'
ret = re.match('\D',text)
print(ret.group())

打印结果:a

2.4 \s匹配空白字符(\t,\n,\r,空格)

import re
text = '\t'
ret = re.match('\s',text)
print(ord(ret.group()))

打印结果:9 (通过ASCII码表可以查到9就是制表符)

2.5 \S匹配非空白字符(与\s作用相反)

import re
text = 'abc'
ret = re.match('\S',text)
print(ord(ret.group()))

打印结果:a

2.6 \w匹配a-zA-Z以及数字和下划线

import re
text = '_abc'
ret = re.match('\w',text)
print(ret.group())

打印结果:_

2.7 W(与\w作用相反)

import re
text = '#'
ret = re.match('\W',text)
print(ret.group())

打印结果:#

2.8 []组合的方式,只要满足括号中的字符,则可匹配

import re
text = '0871-96532'
ret = re.match('[\d-]+',text)
print(ret.group())

打印结果:0871-96532

3.匹配多个字符

3.1 使用[]的形式代替\d

import re
text = '0871-96532'
ret = re.match('[0-9]',text)
print(ret.group())

打印结果:0

3.2 使用[]的形式代替\w

import re
text = '_abc'
ret = re.match('[a-zA-Z0-9_]',text)
print(ret.group())

打印结果:_

3.3 使用[]的形式代替\w

import re
text = '#abc'
ret = re.match('[^a-zA-Z0-9_]',text)
print(ret.group())

打印结果:#

注意:以下的*,+,?依赖与他之前的规则,例如:\d+表示匹配一个或者任意多个数字

3.4 *可以匹配0或者任意多个字符

import re
text = '12345abc'
ret = re.match('\d*',text)
print(ret.group())

打印结果:12345

与+号的区别在与当字符串为空的时候,*号不报错,但是+号会报错。

3.5 +匹配1个或者多个字符

import re
text = '12345abc'
ret = re.match('\d+',text)
print(ret.group())

打印结果:12345

3.6 匹配一个或者0个(要么没有,要么就只有一个)

import re
text = '12345abc'
ret = re.match('\w?',text)
print(ret.group())

打印结果:1

3.7 {m,n}匹配m到n个字符

此语法根据字符串的长度尽可能多的匹配

import re
text = '12345abc'
ret = re.match('\w{1,5}',text)
print(ret.group())

打印结果:12345

4.实战案例

4.1 验证手机号

说明:此处假定手机号只有13,14,15,16,18等开头

import re
text = '18298377942'
ret = re.match('1[3,4,5,6,8]\d{9}',text)
print(ret.group())

打印结果:18298377942

4.2 验证邮箱

import re
text = 'qin_ys@qq.com'
ret = re.match('\w+@[a-zA-Z]+\.[a-zA-Z]+',text)
print(ret.group())

打印结果:qin_ys@qq.com

4.3 验证网址

import re
text = 'https://www.baidu.com'
ret = re.match('(http|https|ftp)://[\S]+',text)
print(ret.group())

4.4 验证身份证

import re
text = '53032219921008229x'
ret = re.match('\d{17}[\dxX]',text)
print(ret.group())

5.总结

posted @ 2020-04-01 10:39  OLIVER_QIN  阅读(302)  评论(0编辑  收藏  举报