正则表达式
re.match()
- 第一个参数, 是需要匹配的规则
- 第二个参数, 将要匹配的内容
match
从字符串开头开始匹配,字符串开头如果匹配不到,就返回None
元字符
.:任意字符,换行符除外
\d:任意数字
\w:任意数字字母下划线
\s:空白符
#如果是大写的s,w,d,代表’非’
匹配多个字符:单个字符
+ 个数限制
(量词)
+
:最少1个,最多无限个
*
:最少零个,最多无限个
?
:最少0个,最多1个
{n}
:固定n
个
{n,m}
:最少n
个,最多m
个
$
:匹配结尾,后面不能再有其他内容
group()
如果匹配到数据,用group方法提取数据
案例
#匹配手机号,11位数字,首位不能是0
r = re.match('[1-9]\d{10}$', "23456789012")
# 首位不是0,列举1-9, 后面只能是10位,必须要结束,加$匹配结尾
print(r)
#匹配微信号:字母、数字、_组成,最少8位,最多20位,
r = re.match('\w{8,20}$', "23456789012") # 判断,20位之后,不能有其他内容
分组、转义
\. : . 代表 匹配任意字符, 但是现在不需要任意字符, 只需要 单独的 . , 加上 \ 进行字符串转义, 此时 . 就是一个单纯的 .
正则匹配的规则表达式中,一般会在字符串的外面 添加 r,代表 原生字符串, 字符串只是本身的含义, 没有其他含义
match Vs Search
-
match 是从字符串开头开始查找,开头如果没有,那就真没有,字符串中间有也不行
-
search 在字符串中从左向右 依次查找,找到就行, 在任意位置均可
-
match: 主要用来 判断 字符串 是否 符合 某个要求
-
search: 主要用来 在 某段 文字中 提取 符合 要求的 内容
import re
s = '欢迎你, 北京'
r1 = re.match('北京', s) # None
r2 = re.search('北京', s) # <re.Match object; span=(5, 7), match='北京'>
贪婪匹配与非贪婪匹配
- 正则匹配中,默认 会尽可能多 的匹配符合要求的内容, 这种匹配方式 称为 贪婪匹配
- 尽快少的匹配符合要求的内容,最多只匹配一次, 这种匹配方式 称为 非贪婪匹配
import re
s = '<img data-original="https://rpic.douyucdn.cn/appCovers/2016/11/13/1213973_201611131917_small.jpg" src="https://rpic.douyucdn.cn/appCovers/2016/11/13/1213973_201611131917_small.jpg" style="display: inline;">'
# 在search搜索内容时,一般不使用$结束符
r = re.search(r'https.*?\.jpg', s)
if r is not None: # 当搜索结果不为空
url = r.group() # 将搜索到的结果提取出来
print(url)
re.findall(r'正则表达式','str')
,结果是一个列表,匹配整个字符串
re.search(r'正则表达式','str')
匹配到第一个结果就返回,返回的是一个对象,使用group
取值
re.match(r'正则表达式','str')
从字符串开始进行匹配,返回一个对象,使用group
取值,如果未匹配到,返回None
re.complie
将正则表达式编译为对象,在需要按正则表达式匹配是可以在直接使用该对象调用以上方法