Python正则表达式(12)

2018-05-02  本文已影响14人  纳米君
  1. 如果给出具体字符,就是精确匹配。
    \d 表示一个数字
    \w 表示一个数字或字母
    \s 表示一个空格
    \b 表示单词的开始或结束
    \A 匹配字符串的开始
    \Z 匹配字符串的结束
  2. . 匹配任意字符
  3. * 表示任意个字符(包含0个)
  4. + 表示至少1个字符
  5. ?表示0个或1个字符
  6. {n}表示n个字符
  7. {n, m}表示n到m个字符
  8. []表示范围,比如[0-9a-zA-Z_]表示1个数字或者字母或者下划线
  9. A|B匹配A或B
  10. ^ 表示行的开头,$ 表示行的结束

Python内置了re模块。

match()方法:字符串匹配表达式
import re

# match方法匹配成功,返回一个Match对象,否则返回None
if re.match(r'^\d{3}\s*-\s*\d{8}$', '021 - 22815487'):
    print('ok')
else:
    print('fail')
split()方法:切分字符串,用正则表达式适用范围更广
s = 'a, b ;  c'
# 两者的差距,字符串split不能过滤;等
print(s.split(' '))
print(re.split(r'[\s\,\;]+', s))
分组,用()表示的就是要提取的分组
match = re.match(r'^(\d{3})-(\d{8})$', '021-55218547')
# group(0)永远是原始的字符串
print(match.group(0))
print(match.group(1))
print(match.group(2))

# 匹配时间
re_match = re.match(r'^([0|1]\d|2[0-3]):([0-5]\d):([0-5]\d)$', '00:00:00')
print(re_match.group(0))
# groups不包含原始字符串
print(re_match.groups())
正则匹配默认贪婪匹配,下面\d+匹配了所有,所以0*只能匹配空字符串了
print(re.match(r'^(\d+)(0*)$', '1002300').groups())
在\d+后面加上?,就是非贪婪匹配了,0*能匹配到00
print(re.match(r'^(\d+?)(0*)$', '1002300').groups())
编译

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

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

如果一个正则表达式要反复用到,可以预编译表达式:

re_compile = re.compile(r'^(\w+|\w+.\w+)@(\w+.com)$')
print(re_compile.match('370996@qq.com').groups())
print(re_compile.match('sd%fgsg233_sa@163.com').groups())
上一篇下一篇

猜你喜欢

热点阅读