当前位置: 首页 > wzjs >正文

关于中国幼教网站开发的经验wordpress 封包 app

关于中国幼教网站开发的经验,wordpress 封包 app,玉儿做春梦网站,网站编辑软件都有哪些正则表达式(regular expression)是一种针对字符串匹配查找所定义的规则模式,独立于语言,但不同语言在实现上也会存在一些细微差别,下面基于python对常用的相关内容进行梳理。 文章目录 一、通用常识1.通配符ps.反义 2.…

正则表达式(regular expression)是一种针对字符串匹配查找所定义的规则模式,独立于语言,但不同语言在实现上也会存在一些细微差别,下面基于python对常用的相关内容进行梳理。

文章目录

  • 一、通用常识
    • 1.通配符
      • ps.反义
    • 2.量词
      • ps.非贪婪匹配
    • 3.位置限定符
    • 4.其他特殊符号
  • 二、python实现
    • 1.常用函数
      • 1)search
      • 2)match
      • 3)findall
    • 2.特殊用法
      • 1) `(?:...) `非捕获组
      • 2)`(?=...)`正向先行断言
      • 3)`(?!...)`负向先行断言
      • 4)`(?<=...)`正向后行断言
      • 5)`(?<=...)`负向后行断言
      • ps1.理解 先行/后行 & 正向/负向
      • ps2.后行断言时,限定字符的长度必须固定

一、通用常识

1.通配符

.:匹配任意字符。(换行符除外)
\w:匹配字母、数字、下划线。(也可以写为[a-zA-Z0-9_]
\d:匹配阿拉伯数字([0-9])。
\s:匹配空白字符。(空格、制表符、换行符等)
[ ]:匹配列表中任意字符。(所有特殊字符在列表中都会按照字面量对待,不需要特殊转义)

ps.反义

\W:匹配非字母、数字、下划线外的字符。
\D:匹配非阿拉伯数字。
\S:匹配非空白字符。
[^ ]:不匹配列表中任意字符。

2.量词

?:0次或1次。
+:1次或多次。
*:0次或多次。
{m}:精确匹配m次。
{m,n}:匹配m~n次。
{m,}:至少匹配m次。

ps.非贪婪匹配

贪婪匹配:满足正则的情况下尽可能多的匹配。
非贪婪匹配:满足正则的情况下尽可能少的匹配。

默认正则中都是贪婪匹配,需要非贪婪匹配时需要在量词后面加个?

3.位置限定符

^:限制起始字符。
$:限制结尾字符。

4.其他特殊符号

|:逻辑或,匹配逻辑或中的任意一个。
\:转义字符,通常对\本身进行转义。

二、python实现

python中实现正则的标准库是re,下面主要介绍该模块中常用的一些方法及作用。

1.常用函数

1)search

匹配目标字符串第一个出现的符合正则的子串,匹配成功返回Match对象,匹配失败返回None

返回的Match对象可通过group方法获取指定捕获组()的内容,无论正则中有没有指定捕获组,默认的捕获组都是0,即整个符合正则的子串。

当在正则中显式指定捕获组时,捕获组索引号按照在正则中从左到右的顺序自1开始递增。

#!/usr/bin/env python3
# -*-coding:utf-8 -*-import rematch = re.search(r'(\d+路)(\d+号)(\d+楼)', '北京市昌平区1路2号3楼')
print(match.group())
print(match.group(1))
print(match.group(2))
print(match.group(3))# 1路2号3楼
# 1路
# 2号
# 3楼

当出现捕获组嵌套的情况时,同样是按照在正则中从左往右出现的顺序解析对应,只不过是递归解析,类似于树的先序遍历。

#!/usr/bin/env python3
# -*-coding:utf-8 -*-import rematch = re.search(r'((\d+路)(\d+号))(\d+楼)', '北京市昌平区1路2号3楼')
print(match.group())
print(match.group(1))
print(match.group(2))
print(match.group(3))
print(match.group(4))# 1路2号3楼
# 1路2号
# 1路
# 2号
# 3楼

2)match

match方法和search用法及返回的对象都一致,唯一的区别是search的目标子串可以出现在字符串中的任何位置,而match是从开头开始匹配,目标子串必须在字符串开头出现。

#!/usr/bin/env python3
# -*-coding:utf-8 -*-import rematch = re.match(r'((\d+路)(\d+号))(\d+楼)', '北京市昌平区1路2号3楼')
if match:print(match.group())print(match.group(1))print(match.group(2))print(match.group(3))print(match.group(4))
else:print('None')# None

在正则前面加个.*适配就可以成功匹配了:

#!/usr/bin/env python3
# -*-coding:utf-8 -*-import rematch = re.match(r'.*((\d+路)(\d+号))(\d+楼)', '北京市昌平区1路2号3楼')
if match:print(match.group())print(match.group(1))print(match.group(2))print(match.group(3))print(match.group(4))
else:print('None')# 北京市昌平区1路2号3楼
# 1路2号
# 1路
# 2号
# 3楼

3)findall

顾名思义,找出字符串中所有匹配正则的子串。无论有无匹配返回的结果都是一个列表。

当正则中无捕获组或者仅有一个捕获组时,返回的是包含单个元素的列表,每个元素都是一个匹配项。

无捕获组返回的是匹配整个正则的子串,1个捕获组返回的是匹配捕获组的子串。

#!/usr/bin/env python3
# -*-coding:utf-8 -*-import reans1 = re.findall(r'\d+路\d+号\d+楼', '北京市昌平区1路2号3楼')
print(ans1)ans2 = re.findall(r'(\d+路)\d+号\d+楼', '北京市昌平区1路2号3楼')
print(ans2)# ['1路2号3楼']
# ['1路']

当正则中包含多个捕获组时,返回包含元组的列表,每个元组是一个正则匹配项,元组中的元素对应了每个匹配项中捕获组的匹配内容,无匹配时用空字符串''代替。

#!/usr/bin/env python3
# -*-coding:utf-8 -*-import reans1 = re.findall(r'((\d+路)(\d+号))(\d+楼)', '北京市昌平区1路2号3楼')
print(ans1)ans2 = re.findall(r'((\d+路)?(\d+号))(\d+楼)', '北京市昌平区2号3楼')
print(ans2)# [('1路2号', '1路', '2号', '3楼')]
# [('2号', '', '2号', '3楼')]

ps:特别注意正则中包含逻辑或|时,无论匹配的是哪个逻辑分支,其余的逻辑分支中的捕获组都会在元组中用空字符串''表示。

#!/usr/bin/env python3
# -*-coding:utf-8 -*-import reans = re.findall(r'B(\d+)层([A-Z]+)区|地下([一二三四五六七八九]+)层([A-Z]+)区','停车场B2层C区;停车场地下一层B区')
print(ans)# [('2', 'C', '', ''), ('', '', '一', 'B')]

2.特殊用法

1) (?:...) 非捕获组

仅匹配,不捕获。通常用于目标需要提取的捕获组前的限制规则比较复杂,需要用到()的场景。

#!/usr/bin/env python3
# -*-coding:utf-8 -*-import reans = re.findall(r'(?:B|地下)[1-9一二三四五六七八九]+层([A-Z]+区)','停车场B2层C区;停车场地下一层B区')
print(ans)# ['C区', 'B区']

2)(?=...)正向先行断言

这里的正向先行的意思是,右侧必须出现可以匹配括号中...的字符,这种方式在实际匹配过程中只会预先查找,不会实际消耗字符串。

比如从下面的日期中提取月份:

#!/usr/bin/env python3
# -*-coding:utf-8 -*-import rematch = re.search(r'\d+(?=月)', '今天是2025年3月5日')
if match:print(match)# <re.Match object; span=(8, 9), match='3'>

3)(?!...)负向先行断言

负向先行:右边不能出现匹配括号中...的字符。

提取日期号,不提取年和月份:

#!/usr/bin/env python3
# -*-coding:utf-8 -*-import rematch = re.search(r'\d+(?![年月0-9])', '今天是2025年3月5日')
if match:print(match)# <re.Match object; span=(10, 11), match='5'>

4)(?<=...)正向后行断言

正向后行:左边必须出现匹配括号中...的字符。

只提取折扣价:

#!/usr/bin/env python3
# -*-coding:utf-8 -*-import rematch = re.search(r'(?<=折扣价)\d+', '原价100;折扣价80;实付价70')
if match:print(match)# <re.Match object; span=(9, 11), match='80'>

5)(?<=...)负向后行断言

负向后行:左边不能出现匹配括号中...的字符。

只提取原价:

#!/usr/bin/env python3
# -*-coding:utf-8 -*-import rematch = re.search(r'(?<!(折扣价|实付价))\d+', '原价100;折扣价80;实付价70')
if match:print(match)# <re.Match object; span=(2, 5), match='100'>

ps1.理解 先行/后行 & 正向/负向

​先行断言​:检查匹配位置的 ​右侧​ 是否符合条件。
​后行断言:检查匹配位置的 ​左侧​ 是否符合条件。

个人觉得,先行/后行 可以理解成目标匹配子串相对于限定字符的 左边/右边。

​正向​:匹配 ​存在​ 某个条件。
​负向​:匹配 ​不存在​ 某个条件。

ps2.后行断言时,限定字符的长度必须固定

在这里插入图片描述
内置文档中提示先行断言限定字符长度无特殊限制,后行断言限定字符长度必须固定。

原因是正则引擎的默认匹配方向是从左到右,当遇到先行断言时,引擎会临时向右扫描,检查后续字符是否符合断言条件。由于匹配方向与引擎的默认方向一致,变长模式不会导致回溯问题。

而后行断言时正则引擎需要反向检查左侧的字符,而反向匹配需要明确的起始位置。如果后行断言是变长模式(如.*a+),引擎无法确定从哪个位置开始检查,导致性能下降或无法实现。


文章转载自:

http://lrvLQSQk.dydqh.cn
http://FW0SSEpD.dydqh.cn
http://stXkYIgk.dydqh.cn
http://fdzRyxkh.dydqh.cn
http://4eOQwsm7.dydqh.cn
http://fJababv4.dydqh.cn
http://xe6HeuLw.dydqh.cn
http://Q4NB4Ond.dydqh.cn
http://0JBB1TQv.dydqh.cn
http://yTZijXfi.dydqh.cn
http://XZrFuAX7.dydqh.cn
http://pwH1h6dd.dydqh.cn
http://CsLjfjly.dydqh.cn
http://92ezHuVa.dydqh.cn
http://SUM544AG.dydqh.cn
http://gZXBmTlS.dydqh.cn
http://YYx9CA0F.dydqh.cn
http://FBwZmB49.dydqh.cn
http://T9rnjJWf.dydqh.cn
http://WGLGgkTX.dydqh.cn
http://Zxeziu96.dydqh.cn
http://bcwJi2Vt.dydqh.cn
http://cBz1Tnim.dydqh.cn
http://eVq95qjh.dydqh.cn
http://M900zcmx.dydqh.cn
http://xUPfiD5w.dydqh.cn
http://LBEvKp9B.dydqh.cn
http://IJHZAOeI.dydqh.cn
http://6OWBRWsX.dydqh.cn
http://oTTrPz0T.dydqh.cn
http://www.dtcms.com/wzjs/685422.html

相关文章:

  • 苏州网站工作室优质的成都网站建设推广
  • 360如何做网站做百度竞价用什么网站
  • 建设银行 产品管理中心网站网站开发项目的设计与实现
  • 一张图片切块做网站背景用万网建设网站教程视频
  • 网站改域名审核时间织梦模板更新网站
  • 腾讯网qq网站贸易网站建设案例
  • 抓好门户网站建设辽宁建设工程信息网官网 a类业绩
  • 做电影网站用什么服务器比较好河南免费网站建设
  • 企业网站建设好的例子先做网站还是做APP
  • 演示公司soap公司网站营销策略有哪些方面
  • 未来中森网站建设咨询网站域名绑定ip
  • 做视频网站收费侵权吗创意策划是做什么的
  • 四川网站建设设计wordpress前台登录注册密码找回
  • 网站 开发 备案代理山东搜索引擎优化
  • 怎样才能建立网站seo成功案例分析
  • 做网站租空间seo分析报告怎么写
  • 网站导航包括快手自媒体平台注册
  • 网站站点创建成功了该怎么做app商城开发
  • seo快速整站上排名教程网站建设合同 费用
  • 企业网站建设周期网站制作网站
  • 无锡模板建站网站建设服务公司案例
  • 我做网站了圆通php做的网站怎么调试
  • 杭州模板建站定制手机建站程序源码
  • 搭建影视网站wordpress 色
  • 网站管理员登录1 建设网站目的是什么
  • 河北建设工程造价信息网站wordpress播放器安装不了
  • 可否用nas做网站wap网站部署
  • 建网站哪便宜百度热词
  • 360网站收录提交入口框架布局技术制作一个网站
  • 促销型网站常见的电子商务网站网址