python笔记-正则表达式

2018-10-14  本文已影响3人  大豆油

Python 正则表达式

基础

  1. \d可以匹配一个数字,\w可以匹配一个字母或数字,所以:
  1. .可以匹配任意字符,所以:
  1. 匹配变长的字符
    在正则表达式中,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符。
    下面看一个具体的例子:\d{3}\s+\d{3,8}

进阶

  1. []表示范围,比如:
  1. A|B可以匹配A或B,所以(P|p)ython可以匹配'Python'或者'python'
  2. ^表示行的开头,^\d表示必须以数字开头。
  3. $表示行的结束,\d$表示必须以数字结束。

re模块

推荐使用 Python 的r前缀,就不用考虑转义。

切分字符串

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

分组

正则表达式有提取子串的强大功能。用()表示的就是要提取的分组(Group)

>>> 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)
>>> m.groups()
('19', '05', '30')

贪婪匹配

正则匹配默认是贪婪匹配,也就是尽可能多的字符,例子如下:

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

加个?采用非贪婪匹配:

>>> re.match(r'^(\d+?)(0*)$', '102300').groups()
('1023', '00')
上一篇 下一篇

猜你喜欢

热点阅读