ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

浅言-正则匹配

2022-01-24 13:02:47  阅读:180  来源: 互联网

标签:匹配 print 浅言 re 正则 字符串 match


所谓正则表达式,就是将字符串抽象化后表达出来的方法。

1、正则匹配

判断字符串是否符合正则的模式,查看是否匹配的过程被称为正则匹配。进行正则匹配的话需要用到match()函数。

import re   #为了进行正则匹配,引入re模块
s = 'Learn python'    
a = re.match('Le',s)   
if a:
    print(a.group())   #group()方法从匹配对象中将匹配的字符串取出来

输出结果:Le

匹配对象为a,match()函数中第一参数中的模式如果跟第二参数中的字符串匹配的话,会将具有匹配信息的对象返回,不符合则返回None。

然而,利用了match()函数的正则匹配是从字符串开头开始评价的。即使在字符串中间找到了匹配的字段,也不会被视为匹配。
如果把刚刚“Le”的地方改成“py”,那么结果就不会显示出来。

如果想要中途匹配的话,需要用search()函数。用法与match()相同。

a = re.search('py',s)   
方法用途
a.start()从匹配了的字符串中提取首字母
a.end()从匹配了的字符串中提取末尾索引加1后所对应的那个字符
a.span()将上述索引对应的元素作为元组获取

2、模式转译

在相同的模式下,想要评价各种字符串的不同,可以通过制作好进行了模式转译的正则表达对象实现快速匹配。

import re
s = 'Learn python'
b=re.compile('Le') #将模式转译后返回给正则表达对象b
a=b.match(s)  #利用正则表达对象的match()方法看是否匹配
if a:
    print(a.group())

结果:Le

3、大写字符和小写字符的区别

想要不区分大小写进行匹配时,要用以下形式

#没转译
a = re.match('Le',s,re.IGNORECASE)
#有转译
b = re.compile('Le',re.IGNORECASE)

4、最短匹配和最长匹配

在没有使用规定重复次数的特殊字符*、+、?、{n,}、{n,m}的情况下,符合模式的字符串中最长的字符串会被匹配(最长匹配),在这些特殊字符的后面添加一个“?”,就会跟最短的字符串相匹配(最短匹配)。

re.match('L.*n','Learn Python').group()
re.match('L.*?n','Learn Python').group()

结果:
‘Learn Python’
‘Learn’

5、获取所有匹配的字符串

使用findall() 函数可以获取所有与模式相匹配的字符串。

import re
s = 'Learn Python'
mlist = re.findall('.n',s)
print(mlist)

.n表示任意一个字符+“n”的意思。
结果:[‘rn’, ‘on’]

6、获得所有匹配的字符串及其位置信息

如果同时还想获得相关的位置信息的话,需要使用finditer() 函数。finditer()函数可以将符合的字符串的位置作为返回值返回。iter在中文中被称为迭代器。

import re
s = 'Learn Python'
miter = re.finditer('.n',s)
for mobj in miter:
    print(mobj.group())
    print(mobj.span())

结果:
rn
(3, 5)
on
(10, 12)

7、正则表达中的替换

sub() 函数来替换正则表达中的字符串。
‘[A-Z].{2}’ 这是检索的模式,表示大写的英文字母加上任意两个字符。‘替换’ 为替换后的字符串。

import re
s1 = 'I love Python'
s2 = re.sub('[A-Z].{2}','替换',s1)
print(s2)

结果:替换ove 替换hon

8、用正则表达式进行分割

split() 函数可以将字符串分割。
‘.n’ 为被检索的模式,表示任意的一个字符+‘n’ 的形式。

import re
s = 'Learn Python,Mareyan'
mlist = re.split('.n',s)
print(mlist)

结果:[‘Lea’, ’ Pyth’, ‘,Mareyan’]

9、小案例-调查密码的形式

规定密码为下述形式,并确认输入的字符串形式是否符合下述规定:

  • 只可以使用半角英文和英文数字以及_(下划线)
  • 首字母为半角英文字母
  • 3个字符以上8个字符以下
import re
while True:
    s=input('密码>')
    if s==' ':
        break
    mobj = re.match('^[a-z][a-z0-9_]{2,7}$',s,re.IGNORECASE)
    if mobj:
        print('密码形式正确。')
    else:
        print('密码形式不正确。')

欢迎大家多交流讨论~[抱拳]

标签:匹配,print,浅言,re,正则,字符串,match
来源: https://blog.csdn.net/weixin_52135112/article/details/122652663

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有