python笔记-正则表达式

Python 正则表达式

基础

  1. \d可以匹配一个数字,\w可以匹配一个字母或数字,所以:
  • '00\d'可以匹配'007',但无法匹配'00A'
  • '\d\d\d'可以匹配'010'
  • '\w\w\d'可以匹配'py3'
  1. .可以匹配任意字符,所以:
  • 'py.'可以匹配'pyc''pyo''py!'等等。
  1. 匹配变长的字符
    在正则表达式中,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符。
    下面看一个具体的例子:\d{3}\s+\d{3,8}
  • \d{3}表示匹配3个数字,例如'010';
  • \s可以匹配一个空格(也包括Tab等空白符),所以\s+表示至少有一个空格,例如匹配' ',' '等;
  • \d{3,8}表示3-8个数字,例如'1234567'。

进阶

  1. []表示范围,比如:
  • [0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;
  • [0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100','0_Z','Py3000'等等;
  • [a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;
  • [a-zA-Z\_][0-9a-zA-Z\_]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。
  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')

你可能感兴趣的:(python笔记-正则表达式)