正则表达式、re模块

一、正则表达式(用来做字符串匹配)

字符组 : [字符组]
在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示
字符分为很多类,比如数字、字母、标点等等。
假如你现在要求一个位置"只能出现一个数字",那么这个位置上的字符只能是0、1、2...9这10个数之一。

字符组

字符

量词

?     # 重复匹配 0次 或 1次
*     # 重复匹配 0次 或 更多次
+     # 重复匹配 1次 或 更多次

{n}   # 重复匹配 n次
{n,}  # 重复匹配 n次 或 更多次
{n,m} # 重复匹配 n次 到 m次

贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配

几个常用的非贪婪匹配

??    # 重复匹配 0次 或 1次,但尽可能少重复
*?    # 重复匹配 任意次,但尽可能少重复
+?    # 重复匹配 1次 或 更多次,但尽可能少重复

{n,}  # 重复匹配 n次以上,但尽可能少重复
{n,m} # 重复匹配 n次 到 m次,但尽可能少重复
.*? 的用法

.   # 任意字符
*   # 取 0 至 无限长度
?   # 非贪婪模式

合在一起就是:取尽量少的任意字符;
但一般不会这么单独写,它大多用法为.*?x
表示取前面任意长度的字符,直到一个x出现

二、re模块下的常用方法

findall():返回所有满足匹配条件的结果,放在列表里

ret = re.findall("[a-z]+", "a b c")
print(ret)  # ['a', 'b', 'c']

search():从前往后找,匹配到一个就返回,返回的变量需要调用group()才能拿到结果;如果没匹配到,那么返回None,调用group会报错。

ret = re.search("b", "a b c")
if ret:
    print(ret.group())  # b

match():从字符串开头开始匹配,如果正则规则从头开始可以匹配上,就返回一个变量;匹配的内容需要用group()才能拿到结果;如果没匹配到,就返回None,调用group会报错。

ret = re.match("a", "a b c")
if ret:
    print(ret.group())  # a

split()

ret = re.split("[ab]", "abcd")  # 先按a分割得到""和"bcd",再对""和"bcd"分别按b分割
print(ret)  # ['', '', 'cd']

sub()

ret = re.sub("\d", "x", "ab12", 1)  # 将数字替换成 x ,参数1表示只替换1个
print(ret)  # abx2

subn()

ret = re.subn("\d", "x", "ab12", 1)  # 将数字替换成 x ,返回一个元组(替换的结果,替换了多少次)
print(ret)  # ('abx2', 1)

complie():当正则规则较长且经常被使用的时候,使用complie()

obj = re.compile("\d{2}")  # 将正则表达式编译成为一个"正则表达式对象", 匹配的是2个数字
ret = obj.search("a1b23")  # 正则表达式对象调用search,参数为待匹配的字符串
print(ret.group())  # 23

finditer():返回一个存放匹配结果的迭代器

ret = re.finditer("\d", "a1b23c456")  #finditer返回一个存放匹配结果的迭代器
print(next(ret).group())  # 1 查看第一个结果
print(next(ret).group())  # 2 查看第二个结果

# 查看剩余的左右结果
print([i.group() for i in ret])  
#或者用for循环取值:
for i in ret:
    print(i.group())

注意:

findall()的优先级查询

ret = re.findall("www.(baidu|cnblogs).com", "www.cnblogs.com")
print(ret)  # ["cnblogs"] 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可

ret = re.findall("www.(?:baidu|cnblogs).com", "www.cnblogs.com")
print(ret)  # ["www.cnblogs.com"]

split()的优先级查询

ret=re.split("\d+", "ab1cd2ef")
print(ret)  # ['ab', 'cd', 'ef']

ret = re.split("(\d+)", "ab1cd2ef")
print(ret)  # ['ab', '1', 'cd', '2', 'ef']
"""
在匹配部分加上 () 之后所切出的结果是不同的,
没有 () 的,则没有保留所匹配的项,但是有 () 的却能够保留了匹配的项,
这个在某些需要保留匹配部分的使用过程是非常重要的。
"""

匹配标签

ret = re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>", "<h1>HelloWorld</h1>")
# 在分组中利用 ?P<xx> 的形式给分组起名字,xx代表要定义的名字
# 获取的匹配结果可以直接用group("xx")拿到对应的值
print(ret.group("tag_name"))  # h1
print(ret.group())            # <h1>HelloWorld</h1>

 

转载于:https://www.cnblogs.com/believepd/p/9614378.html

多角色体系 支持管理员、商家、消费者三种角色,权限分级管控: 管理员:负责平台整体配置、用户审核、数据监控等全局操作。 商家:管理店铺信息、发布商品、处理订单、回复评价等。 消费者:浏览商品、加入购物车、下单支付、评价商品等。 实现用户注册(手机号 / 邮箱验证)、登录(支持密码 / 验证码 / 第三方登录)、个人信息管理(头像、收货地址、密码修改)。 权限精细化控制 商家仅能管理自家店铺及商品,消费者仅能查看和购买商品,管理员拥有全平台数据访问权限。 二、商品管理功能 商品信息维护 商家可发布商品:填写名称、分类(如服饰、电子产品)、子类别(如手机、笔记本)、规格(尺寸、颜色、型号)、价格、库存、详情描述(图文)、物流信息(运费、发货地)等。 支持商品上下架、库存调整、信息编辑,系统自动记录商品状态变更日志。 商品分类与搜索 按多级分类展示商品(如 “数码产品→手机→智能手机”),支持自定义分类体系。 提供智能搜索功能:按关键词(名称、品牌)搜索,支持模糊匹配和搜索联想;结合用户浏览历史对搜索结果排序(优先展示高相关度商品)。 商品推荐 基于用户浏览、收藏、购买记录,推荐相似商品(如 “浏览过该商品的用户还买了…”)。 首页展示热门商品(销量 TOP10)、新品上架、限时折扣等推荐列表。 三、订单与交易管理 购物车与下单 消费者可将商品加入购物车,支持修改数量、选择规格、移除商品,系统自动计算总价(含运费、折扣)。 下单流程:确认收货地址→选择支付方式(在线支付、货到付款)→提交订单→系统生成唯一订单号。 订单处理流程 订单状态跟踪:待支付→已支付→商家发货→物流运输→消费者收货→订单完成,各状态变更实时通知用户。 商家端功能:查看新订单提醒、确认发货(填写物流单号)、处理退款申请(需审核理由)。 消费者端功能:查看订单详情、追踪物流、申请退款 / 退货、确认收货。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值