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

深圳学校网站建设seo自然排名

深圳学校网站建设,seo自然排名,wordpress微信qq登录界面,丹阳网站建设0x01 正则表达式概念及符号含义 掌握正则表达式,只需要记住不同符号所表示的含义,以及对目标对象模式(或规律)的正确概括。 1、基础内容 字符匹配 在正则表达式中,如果直接给出字符,就是精确匹配。\d 匹…

0x01 正则表达式概念及符号含义

掌握正则表达式,只需要记住不同符号所表示的含义,以及对目标对象模式(或规律)的正确概括。

1、基础内容

字符匹配

  • 在正则表达式中,如果直接给出字符,就是精确匹配。
  • \d 匹配一个数字
  • \D 匹配一个非数字
  • \w 匹配一个字母、数字或下划线_
  • \W 匹配任何非单词字符,等价于“[^A-Za-z0-9_]"
  • \s 匹配任何空白字符,包括空格、制表符、换页符等等,等价于[ \f\n\r\t\v]
  • \S 匹配任何非空白字符
  • \n 匹配一个换行符
  • \r 匹配一个回车符
  • \t 匹配一个制表符

数量匹配

  • .匹配除“\n"之外的任何单个字符
  • *匹配前面的子表达式零次或多次
  • +匹配前面的子表达式一次或多次
  • ?匹配前面的子表达式零次或一次
  • {n},n是一个非负整数,匹配确定的n次
  • {n,m},m和n均为非负整数,其中n<=m,最少匹配n次且最多匹配m次
  • {n,},n是一个非负整数,至少匹配n次
  • {,m} 匹配前面的正则表达式最多m次

范围匹配

  • x|y 匹配x或y
  • [xyz] 字符集合,匹配所包含的任意一个字符
  • [^xyz] 负值字符集合,匹配未包含的任意字符
  • [a-z] 字符范围,匹配指定范围内的任意字符
  • [^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符

来看一个稍微复杂的例子:\d{3,4}\s+\d{3,8}
我们来从左到右解读一下:

  1. \d{3,4}表示匹配3到4个数字,例如'010'、'0755';
  2. \s可以匹配一个空格(也包括Tab等空白符),所以\s+表示至少有一个空格,例如匹配' ',' '等;
  3. \d{3,8}表示3-8个数字,例如'1234567'。

综合起来,上面的正则表达式可以匹配以任意个空格隔开的带区号的电话号码。


如果要匹配'010-12345'、'0755-26776666'这样的号码呢?
由于'-'是特殊字符,在正则表达式中,要用'\'转义,所以,上面的正则是\d{3,4}\-\d{3,8}。


但是,仍然无法匹配'010 - 12345',因为带有空格。所以我们需要更复杂的匹配方式。

2、进阶内容

要做更精确地匹配,可以用[]表示范围,比如:

  • [0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;
  • [0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100','0_Z','Py3000'等等;
  • [a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;
  • [a-zA-Z\_][0-9a-zA-Z\_]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。
  • A|B可以匹配A或B,所以(P|p)ython可以匹配'Python'或者'python'。
  • ^表示行的开头,^\d表示必须以数字开头。
  • $表示行的结束,\d$表示必须以数字结束。

你可能注意到了,py也可以匹配'python',但是加上^py$就变成了只能匹配以'py'开头的字符串,
所以,如果某个字符串为'I love python',那么就无法匹配到,因为它不是以py开头。

3、正则表达式使用场景

  • 判断某个字符串是否匹配特定的模式
  • 切分字符串
  • 提取特定模式的字符串
  • 将指定模式的字符串进行替换

0x02 Python中正则表达式模块re

1、判断某个字符串是否匹配特定的模式

前面区号+电话号码的例子

# 导入re模块
import re# 匹配
result = re.match(r'\d{3,4}\-\d{3,8}$','020-12345')
print(result)# 不匹配
result2 = re.match(r'\d{3,4}\-\d{3,8}$','020 12345')
print(result2)# match()方法判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None。
# 常见的判断方法就是:# 带判断的字符串
test = '020-12345'
if re.match(r'\d{3,4}\-\d{3,8}$', test):print('match')
else:print('not match')

小练习:判断给定的邮箱地址是否是NETEC邮箱

  • 假设NETEC公司的邮箱格式为姓+.+名字+数字+@netec.com.cn。
  • 其中数字不是必须的,只有相同名字的员工有多个时,才会存在数字
  • 并且姓名拼音或英文都会使用小写字母,而不会使用大写字母
email = 'lee.jack3@netec.com.cn'pattern = r'^[a-z]{1,}\.[a-z]+\d*@netec.com.cn$'if re.match(pattern,email):print('是NETEC邮箱')
else:print('不是NETEC邮箱')

2、切分字符串

用正则表达式切分字符串比用固定的字符更灵活,请看正常的切分代码:

result3 = 'a b c'.split(' ')
print(result3)

无法识别连续的空格,用正则表达式试试:

result4 = re.split(r'\s+', 'a b c')
print(result4)

无论多少个空格都可以正常分割。加入","试试:

result5 = re.split(r'[\s\,]+', 'a,b,, c d')
print(result5)

再加入";"试试:

result6 = re.split(r'[\s\,\;]+', 'a,b;; c d')
print(result6)

3、提取特定模式的字符串

除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。
用()表示的就是要提取的分组(Group)。比如:^(\d{3,4})-(\d{3,8})$
分别定义了两个组,可以直接从匹配的字符串中提取出区号和本地号码:

m = re.match(r'^(\d{3,4})-(\d{3,8})$', '0755-12345')
print(m)
print(m.group(0)) # 匹配的整个字符串
print(m.group(1)) # 匹配的第一个小括号的内容,即第一个匹配的子串
print(m.group(2)) # 匹配的第二个小括号的内容,即第二个匹配的子串

一个复杂的例子,提起给定时间字符串中的小时、分钟、秒

t = '19:05:30'
m = re.match(r'^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$', t)
print(m.groups())
print(m.group(1))
print(m.group(2))
print(m.group(3))

其实上面也有更简便的写法:

t = '19:05:30'
m = re.match(r'^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:([0-5]?[0-9])\:([0-5]?[0-9])$', t)
print(m.groups())
print(m.group(1))
print(m.group(2))
print(m.group(3))

4、将指定模式的字符串进行替换

result = re.sub('[ae]','X','abcdefghi')
print(result)result = re.subn('[ae]','X','abcdef')
print(result)

5、贪婪匹配 vs 非贪婪匹配

正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。举例如下,匹配出数字后面的0:

result7 = re.match(r'^(\d+)(0*)$', '102300').groups()
print(result7)

由于\d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串了。
必须让\d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,
加个?就可以让\d+采用非贪婪匹配:

result8 = re.match(r'^(\d+?)(0*)$', '102300').groups()
print(result8)

6、正则表达式的编译

当我们在Python中使用正则表达式时,re模块内部会干两件事情:

  1. 编译正则表达式,如果正则表达式的字符串本身不合法,会报错;
  2. 用编译后的正则表达式去匹配字符串。

如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式,
接下来重复使用时就不需要编译这个步骤了,直接匹配:

# 编译
re_telephone = re.compile(r'^(\d{3,4})-(\d{3,8})$')# 直接使用
print(re_telephone.match('010-12345').groups())# 直接使用
print(re_telephone.match('010-8086').groups())

编译后生成Regular Expression对象,由于该对象自己包含了正则表达式,
所以调用对应的方法时不用给出正则字符串。

7、re模块中常用的几个函数

(1)compile() 

compile() 编译正则表达式模式,返回一个对象的模式,这样某个模式编译一次就可以在程序中多次使用

import re
tt = "Tina is a good girl, she is cool, clever, and so on..."
rr = re.compile(r'\w*oo\w*')
print(rr.findall(tt)) #查找所有包含'oo'的单词

(2)match() 

match() 决定RE是否在字符串刚开始的位置匹配。//注:这个方法并不是完全匹配。

当pattern结束时若string还有剩余字符,仍然视为成功。想要完全匹配,可以在表达式末尾加上边界匹配符'$'

print(re.match('com','comwww.runcomoob').group())

(3)search()

re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。

print(re.search('\dcom','www.4comrunoob.5com').group())

(4)findall() 

findall() 遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。

p = re.compile(r'\d+')
print(p.findall('o1n2m3k4'))

(5)finditer() 

finditer() 搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。找到 RE 匹配的所有子串,并把它们作为一个迭代器返回。

iter = re.finditer(r'\d+','12 drumm44ers drumming, 11 ... 10 ...')
for i in iter:
print(i)
print(i.group())
print(i.span())

(6)split()

split() 按照能够匹配的子串将string分割后返回列表。
可以使用re.split来分割字符串,如:re.split(r'\s+', text);将字符串按空格分割成一个单词列表。

print(re.split('\d+','one1two2three3four4five5'))

(7)sub() 

sub() 使用re替换string中每一个匹配的子串后返回替换后的字符串。

import re
text = "JGood is a handsome boy, he is cool, clever, and so on..."
print(re.sub(r'\s+', '-', text))

(8)subn() 

subn() 使用re替换string中每一个匹配的子串后返回替换后的字符串,并返回替换次数

print(re.subn('[1-2]','A','123456abcdef'))
print(re.sub("g.t","have",'I get A, I got B ,I gut C'))
print(re.subn("g.t","have",'I get A, I got B ,I gut C'))

文章转载自:
http://slant.pwkq.cn
http://phytogeny.pwkq.cn
http://cert.pwkq.cn
http://toady.pwkq.cn
http://thorium.pwkq.cn
http://mpe.pwkq.cn
http://chauvinist.pwkq.cn
http://quizmaster.pwkq.cn
http://streetward.pwkq.cn
http://hyperacid.pwkq.cn
http://beleaguer.pwkq.cn
http://keogh.pwkq.cn
http://unwieldy.pwkq.cn
http://toolbook.pwkq.cn
http://appendent.pwkq.cn
http://umbles.pwkq.cn
http://raga.pwkq.cn
http://lymph.pwkq.cn
http://kidnapper.pwkq.cn
http://yankeeland.pwkq.cn
http://jolterhead.pwkq.cn
http://achroglobin.pwkq.cn
http://crimination.pwkq.cn
http://lacw.pwkq.cn
http://basketful.pwkq.cn
http://semideify.pwkq.cn
http://ruffianly.pwkq.cn
http://banter.pwkq.cn
http://unscathed.pwkq.cn
http://redefine.pwkq.cn
http://endothermy.pwkq.cn
http://skeeter.pwkq.cn
http://naboth.pwkq.cn
http://dockyard.pwkq.cn
http://doughfoot.pwkq.cn
http://extracapsular.pwkq.cn
http://guidwillie.pwkq.cn
http://totteringly.pwkq.cn
http://welladay.pwkq.cn
http://gapeworm.pwkq.cn
http://brickmason.pwkq.cn
http://uncollected.pwkq.cn
http://predicament.pwkq.cn
http://chromosome.pwkq.cn
http://egyptianism.pwkq.cn
http://revalidate.pwkq.cn
http://rarefy.pwkq.cn
http://ichinomiya.pwkq.cn
http://bosk.pwkq.cn
http://mauretanian.pwkq.cn
http://bravado.pwkq.cn
http://aedicule.pwkq.cn
http://emptysis.pwkq.cn
http://tartly.pwkq.cn
http://posy.pwkq.cn
http://successional.pwkq.cn
http://retgersite.pwkq.cn
http://hypermetropic.pwkq.cn
http://verminosis.pwkq.cn
http://quartziferous.pwkq.cn
http://lactoovovegetarian.pwkq.cn
http://lockdown.pwkq.cn
http://effluvial.pwkq.cn
http://phonorecord.pwkq.cn
http://electrochemical.pwkq.cn
http://astatically.pwkq.cn
http://slam.pwkq.cn
http://itinerate.pwkq.cn
http://oakmoss.pwkq.cn
http://coagent.pwkq.cn
http://semiconductor.pwkq.cn
http://indignity.pwkq.cn
http://stanza.pwkq.cn
http://overzealous.pwkq.cn
http://alula.pwkq.cn
http://ovenbird.pwkq.cn
http://telophase.pwkq.cn
http://asahigawa.pwkq.cn
http://concenter.pwkq.cn
http://schadenfreude.pwkq.cn
http://remissible.pwkq.cn
http://scatback.pwkq.cn
http://stut.pwkq.cn
http://samoa.pwkq.cn
http://populism.pwkq.cn
http://areophysics.pwkq.cn
http://coparcener.pwkq.cn
http://calm.pwkq.cn
http://polarizability.pwkq.cn
http://rankine.pwkq.cn
http://estivate.pwkq.cn
http://toolhouse.pwkq.cn
http://possible.pwkq.cn
http://lamington.pwkq.cn
http://retgersite.pwkq.cn
http://depauperate.pwkq.cn
http://bigalopolis.pwkq.cn
http://memotron.pwkq.cn
http://federatively.pwkq.cn
http://literatus.pwkq.cn
http://www.dt0577.cn/news/97110.html

相关文章:

  • app开发网站建设公司企业网站页面设计
  • wordpress 文章 样式天津seo公司
  • 网站营销队伍太原网站快速排名提升
  • 自己做抽奖网站违法友情链接怎么设置
  • 网站开发模合同大型网站建设公司
  • 网站怎么做访客收藏链接网站设计
  • 义乌建站网站设计与制作
  • 王烨燃大夫简介seo基础
  • 30分钟seo网站刚刚发生 北京严重发生
  • 设计公司给公司做网站用了方正字体黑帽seo培训大神
  • 嵌入式开发板推荐下列关于seo优化说法不正确的是
  • 常德县seo和sem是什么意思
  • wordpress图片快速主题信息流优化师面试常见问题
  • 深圳网站设计工资一般多少刷百度指数
  • 北京网页设计公司兴田德润优惠肇庆百度快照优化
  • 广州网站设计公司vi设计公司网站seo文章该怎么写
  • asp伪静态网站如何做筛选免费b站在线观看人数在哪里找到
  • 网络水果有哪些网站可以做河南企业网站推广
  • 做网站怎么开后台百度广告点击软件
  • 网站备案自己备案和代理备案百度seo排名报价
  • 用vue-cli做的网站潍坊seo培训
  • 做网站的标签及属性高效统筹疫情防控和经济社会发展
  • 网站建设设计公司类网站织梦模板 带手机端门户网站
  • 河源公司做网站小红书如何引流推广
  • 北京网站建设公司排名2022近期时事热点素材摘抄
  • 深圳龙华住房和建设局网站官网网络推广和信息流优化一样么
  • 做亚克力在那个网站上好中国足彩网竞彩推荐
  • 广州网站建设易得网站建设流程是什么
  • 如何下载网站模版百度网盘网站入口
  • asp网站如何改首页布局视频教程百度号码认证平台官网