正则表达式

正则表达式

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将正则表达式编译为对象,在需要按正则表达式匹配是可以在直接使用该对象调用以上方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值