python之正则表达式元字符

正则表达式模式

模式字符串使用特殊的语法来表示一个正则表达式:
字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。
多数字母和数字前加一个反斜杠时会拥有不同的含义。
标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。
反斜杠本身需要使用反斜杠转义。
由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r'\t',等价于 '\\t')匹配相应的特殊字符。
下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。

1.点号.
匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
import re
print(re.findall('ni.','nih'))   #['nih']
print(re.findall('ni.','ni\n'))  #[],除了换行符
print(re.findall('n.i','nni'))  #['nni']

2.转义字符\
去元字符的特殊含义,让特异功能消失
print(re.findall('to\.m','to.m'))  #['to.m']
print(re.findall('to\\nm','to\nm')) #['to\nm']
print(re.findall('to\nm','to\nm')) #['to\nm']
print('to\nm')  #to   这里有换行 m
这里也有更方便的方法:
# print(r'ben\nhaha')  # 去转义    前面加个r就可以了

3.*号
# 匹配0个或多个的表达式。
print(re.findall('to*m','tm'))  #['tm']   ----0次
print(re.findall('to*m','toooom'))   #匹配前面一个字符0次或者多次  ------多次

4.+号
# 匹配前面字符的1次或者多次(和*号的区别,就是不能匹配0次)
print(re.findall('be+n','beeeen'))  #['beeeen']
print(re.findall('be+n','bn'))   #[]

5.?号
# 匹配前面字符的0次或者1次
print(re.findall('be?n','bn'))   #0次
print(re.findall('be?n','ben'))   #1次
print(re.findall('be?n','beeeeen'))   #只能匹配0次和1次
#注意:+,*,?:一起理解,功能一样,区别是次数的不同而已

6.^符号
#匹配字符串的开头
print(re.findall('^test123','123test'))   #[]
print(re.findall('^test','test789'))   #['test']

7.$符号
#匹配字符串结尾
print(re.findall(r'ha$','123ha'))  #['ha']
print(re.findall(r'ha$','123'))    #[]

8.|符号
# |符号:从左边--->右边开始匹配,任意一个满足即可
print(re.findall(r'ben|eric','123'))   #[]
print(re.findall(r'ben|eric','ben123'))  #['ben']
print(re.findall(r'ben|eric','eric123'))  #['eric']

9.{}大括号
#匹配前面字符的m次
print(re.findall('b{1}e{3}n{2}','hahabeeenn'))
print(re.findall('b{1,3}e{3}n{2}','hahabbeeenn'))
print(re.findall('b{1,}e{3,}n{2}','hahabbbbeeeenn'))   # 最少  b{1,}  等价于b+

10.[]括号
# 字符集合:对应匹配的字符是字符集里面的任意字符即可
print(re.findall('[ben]','b'))  #['b']
print(re.findall('[ben]','n'))   #['n']
print(re.findall('[ben]','d'))  #[]
print(re.findall('[ben]{4}','bbbbbeeeeenn')) #['bbbb', 'beee', 'eenn']

11.()括号
# 匹配之后的结果打散,匹配结果分为若干部分
a = re.compile(r'(ben){1}(\w+){2}([a-z]{2})(\w+)')
ret = a.match('ben98zzDDD')
if ret:
    print(ret.group())  #ben98zzDDD
    print(ret.group(1))  #ben
    print(ret.group(2))  #8
    print(ret.group(3))  #zz

特殊字符类

# 1.\d:0-9
print(re.findall('b\d{2}en','b987en'))   #[]
print(re.findall('b\d{3}en','b987en'))   #['b987en']

#2.\D:匹配非数字
print(re.findall('b\D{3}en','bdgfen'))  #['bdgfen']
print(re.findall('b\D{3}en','b789en'))  #[]

#3.\s:匹配空格
print(re.findall('ben\seric\sgavin','ben eric gavin'))  #['ben eric gavin']
print(re.findall('ben\seric\sgavin','beneric gavin'))   #[]

#4.\S:匹配非空格
print(re.findall('ben\Sen','benben'))  #['benben']
print(re.findall('ben\Sen','ben\nen'))  #[]

# 5.\w:匹配a-z,A-Z,0-9,_(4部分)
# 等价于'[A-Za-z0-9_]'
print(re.findall('\w{3}','b_A'))  #['b_A']
print(re.findall('\w{3}','123456findall'))  #['123', '456', 'fin', 'dal']

# 6.\W:与\w相反,4部分之外
#等价于 '[^A-Za-z0-9_]'
print(re.findall('\W{3}',']\[]#'))

#7.分组起名
a_str = '20180311562'
pattern =(r'(?P<入学时间>\d{8})(?P<编号>\d{3})')
ret = re.match(pattern,a_str)
print(ret.groupdict())

| 实例 |描述  |
|-[Pp]ython-|-匹配 "Python" 或 "python"-|
| rub[ye] | 匹配 "ruby" 或 "rube"
| [aeiou] | 匹配中括号内的任意一个字母
| [0-9] | 匹配任何数字。类似于 [0123456789]
| [a-z]| 匹配任何小写字母
| [A-Z] | 匹配任何大写字母
| [a-zA-Z0-9] | 匹配任何字母及数字
| [^aeiou] | 除了aeiou字母以外的所有字符
| [^0-9]| 匹配除了数字外的字符
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值