博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
43-正则表达式(1)
阅读量:5109 次
发布时间:2019-06-13

本文共 2003 字,大约阅读时间需要 6 分钟。

正则表达式:字符串匹配

1.单字符表示:

  • .     =>  通配
  • /d    =>  数字       /w    =>  字母及数字       /s    =>  空格,Tab,\n,\t这些空白符
    '''
2.字符个数:

'''

* => 任意个(包括0)
+ => 至少一个
? => 0或1个
{n} => n个
{n,m} => n~m个
'''

3.组合举例:

'''

\d{3}\s+\d{3,8} => 3个数字,至少一个空格,3到8数字
'010-12345' => 它的正则是:\d{3}-\d{3,8}
'''

4.进阶:

'''

[0-9a-zA-Z_]: 恰好一个字符,可是0~9,a~z,A~Z,下划线。
[0-9a-zA-Z_]+ : 至少一个以上字符
[a-zA-Z_][0-9a-zA-Z_]* : 一个字符以及任意个字符
[a-zA-Z_][0-9a-zA-Z_]{0, 19} 0-19个符合要求的字符 {字符的值域就是[][]这两个}
A|B 匹配A或者B
^x 以x开头:比如, ^\d 是必须以数字开头
\(x 以x结尾:比如 \w\) 是必须以数字或者字母结尾
例如,^py$ 既要py开头又要py结尾,只能是py
'''

4.re模块

s = r'ABC-001' #r前缀标识的字符串不考虑转义字符,\只是代表正则里面的符号

import re
r1 = re.match(r'^\d{3}-\d{3,8}\(', '010-12345') #若匹配成功,返回一个match的instance print(r1,'\n') r2 = re.match(r'^\d{3}\-\d{3,8}\)', '010 12345') #若失败,返回Node
print(r2,'\n')

4.1切分字符:更加方便和强大

s1 = re.split(r'\s+', 'a b c') #至少一个空格就分割

s2 = re.split(r'[\s,]+', 'a,b, c d') #至少一个空格或者,
s3 = re.split(r'[\s,;]+', 'a,b;; c d') #至少一个空格或者一个,或者一个;

依次类推,支持很多的分隔符和分割要求

print(s1,'; ', s2,'; ', s3,'\n')

4.2分组:提取子串

m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345') #分成两组,第一组为3个数字,中间以-分割,第二组3-8个数字

print(m,'\n')
print(m.group(0),'\n') #group(0)永远是字符串本身
print(m.group(1),'\n')
print(m.group(2),'\n')

t = '19:05:30' #合法输入是:时分秒都要求是两位,也就是00:00:00 ~ 23:59:59

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,'\n')
g = m.groups()
print(g,'\n')

4.3正则默认是贪婪匹配:匹配尽可能多的字符

比如想匹配'102300'后面的00,

version_1

r1 = re.match(r'^(\d+)(0*)\(', '102300').groups() #第一组至少一个数字,结果直接把102300全匹配了,第二组结尾任意个0,结果是0个0 print(r1,'\n') r2 = re.match(r'^(\d+?)(0*)\)', '102300').groups() #第一组一个0,第二组结尾任意个0;再分组

print(r2,'\n')

5.正则的编译过程:先把正则编译通过,再去和文本串进行匹配

故而对于大型复用的正则表达式,可以预编译生成一个RegEx对象,再去匹配任意多的文本串

编译:

re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$') #第一组3个数字开头,中间-分隔,第二组3到8数字结尾

使用:

r1 = re_telephone.match('010-12345').groups()

print(r1,'\n')
r2 = re_telephone.match('010-8086').groups()
print(r2,'\n')

转载于:https://www.cnblogs.com/LS1314/p/8504594.html

你可能感兴趣的文章
博弈论 从懵逼到入门 详解
查看>>
永远的动漫,梦想在,就有远方
查看>>
springboot No Identifier specified for entity的解决办法
查看>>
慵懒中长大的人,只会挨生活留下的耳光
查看>>
"远程桌面连接--“发生身份验证错误。要求的函数不受支持
查看>>
【BZOJ1565】 植物大战僵尸
查看>>
视频:"我是设计师"高清完整版Plus拍摄花絮
查看>>
VALSE2019总结(4)-主题报告
查看>>
浅谈 unix, linux, ios, android 区别和联系
查看>>
51nod 1428 活动安排问题 (贪心+优先队列)
查看>>
中国烧鹅系列:利用烧鹅自动执行SD卡上的自定义程序(含视频)
查看>>
Solaris11修改主机名
查看>>
latex for wordpress(一)
查看>>
如何在maven工程中加载oracle驱动
查看>>
Flask 系列之 SQLAlchemy
查看>>
iframe跨域与session失效问题
查看>>
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
Hash和Bloom Filter
查看>>