一、语法
操作符
. 任何单个字符
[] 字符集
[^ ] 非字符集
* 前一个字符0次或无限次
+ 前一个字符1次或无限次
? 前一个字符0次或1次
| 左右表达式任意一个
{m} 扩展前一个字符m次
{m,n} 扩展前一个字符m至n次
^ 匹配字符串开头
$ 匹配字符串结尾
() 分组标记
\d 数字,[0-9]
\w 单词字符,[A-Za-z0-9]
经典实例
^[A-Za-z]+$ 26个字符组成的字符串
^-?\d+$ 整数形式字符串
\d{3}-\d{8}|\d{4}-\d{7} 国内电话号码
[1-9]\d{5} 境内邮政编码
二、Re库
主要功能函数
搜索
re.search(pattern, string, flag)
>>> match = re.search(r'[1-9]\d{5}', 'BUAA100081')
>>> if match:
... print(match.group(0))
...
100081
匹配
re.match(pattern, string, flags=0)
>>> match = re.match(r'[1-9]\d{5}', 'BUAA100081')
>>> match.group(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> match = re.match(r'[1-9]\d{5}', 'BUAA100081')
>>> if match:
... print(match.group(0))
...
100081
搜索
re.findall(pattern, string, flags=0)
>>> list = re.findall(r'[1-9]\d{5}', 'BUAA100081 TSU100084')
>>> list
['100081', '100084']
分割
re.split(pattern, string, maxsplit=0, flags=0)
>>> re.split(r'[1-9]\d{5}', 'BUAA100081 TSU100084')
['BUAA', ' TSU', '']
>>> re.split(r'[1-9]\d{5}', 'BUAA100081 TSU100084', maxsplit=1)
['BUAA', ' TSU100084']
搜索,返回迭代类型
re.finditer(pattern, string, flags=0)
>>> for m in re.finditer(r'[1-9]\d{5}', 'BUAA100081 TSU100084'):
... if m:
... print(m.group(0))
...
100081
100084
替换
re.sub(pattern, repl, string, count=0, flags=0)
>>> import re
>>> re.sub(r'[1-9]\d{5}', ':zipcode', 'BUAA100081 TSU100084')
'BUAA:zipcode TSU:zipcode'
三、Match对象
四、贪婪匹配和最小匹配
贪婪匹配
>>> match = re.search(r'PY.*N', 'PYANBNCNDN')
>>> match.group(0)
'PYANBNCNDN'
最小匹配
>>> match = re.search(r'PY.*?N', 'PYANBNCNDN')
>>> match.group(0)
'PYAN'