re
Python中使用正则表达式需要用到re库
re为Python的标准库,无需另外安装, 只需导入即可
import re
正则表达式的表示类型
- raw string 类型(原生字符串类型) 例如:
r
’[1-9]\
d{5}’ - string 类型,(将斜杠表示为转义字符) 例如 :‘[1-9]
\\
d{5}’
正则表达式的常用操作符
操作符 | 说明 | 实例 |
---|---|---|
. | 匹配除换行符\n 外的任意单个字符 | 正则表达式a.c 在字符串abcde中匹配到abc |
\ | 表示位于\之后的为转义字符 | 正则表达式a.c 在字符串a.cbe中匹配到a.c |
[ ] | 字符集,对单个字符给出取值范围 | [abc]表示a、b、c、[a-z]表示a到z单个 字符 |
[^] | 非字符集,对单个字符给出排出范围 | [^abc]表示非a或b或c的单个字符 |
* | 前一个字符0此或无限次扩展 | abc*表示ab,abc,abcc等 |
+ | 前一个字符1次或无限次扩展 | abc+表示abc,abcc等 |
? | 前一个字符0次或1次扩展 | abc?表示ab,abc |
| | 匹配位于| 之前或之后的字符 | abc|def 表示abc或者def |
{m} | 扩展前一个字符m次 | ab{2}c表示abbc |
{m,n } | 扩展前一个字符m到n次(含n) | ab{1,2}c表示abc,abbc |
^ | 匹配字符串开头 | ^abc表示abc且在一个字符串的开头 |
$ | 匹配字符串结尾 | abc$ 表示abc且在一个字符串的结尾 |
() | 分组标记,内部只能使用“或”操作符 | (abc)表示abc,(abc|def) 表示abc或def |
\d | 数字,等价于[0-9] | |
\D | 与\d含义相反 等价于 [^0-9] | |
\s | 任意一个空白字符 | |
\S | 任意一个非空白字符 | |
\w | 1位数字字母或下划线,等价于[A-Za-z0-9_] | |
\W | 等价于[^A-Za-z0-9_] |
常用函数
①re.match(pattern,string ,flags=0)
函数作用: 尝试从字符串的起始位置匹配一个模式,若匹配成功则返回一个匹配对象;否则返回None
pattern:正则表达式的字符串
string:待匹配字符串
flags:正则表达式使用时的控制标记
标记值 | 说明 |
---|---|
re.I | 忽略正则表达式的大小写,即对大小写不敏感,[A-Z]能够匹配小写字符 |
re.M | 多行匹配,影响^和$ |
re.S | 匹配包括换行符在内的所有字符 |
匹配对象函数 | 说明 |
---|---|
group(0) | 返回包含整个表达式的字符串 |
group(n1,n2,n3,…) | 返回包含多个组号对应的元素的元组 |
group() | 返回一个包含所有小组字符串的元组 |
groupdict() | 返回一个包含所有经命名匹配小组的字典 |
str="0086-010-88668866"
mat=re.match(r"(?P<nation>\d{4,})-(?P<zone>\d{3,})-(?P<number>\d{8,})",str)
print("group(1,2,3):",mat.group(1,2,3))
print("groupdict:",mat.groupdict())
'''
group(1,2,3): ('0086', '010', '88668866')
groupdict: {'nation': '0086', 'zone': '010', 'number': '88668866'}
'''
②re.search(pattern,string ,flags=0)
函数作用:和re.match()用法相同
③re.findall(pattern,string ,flags=0)
函数作用:搜索字符串,以列表类型返回全部匹配的子串
④ re.splite(pattern,string ,maxsplit,flags=0)
函数作用: 将一个字符串按照正则表达式匹配结果分割,返回列表类型
maxsplit:最大分割数,剩余部分作为最后一个元素输出
⑤re.finditer(pattern,string ,flags=0)
函数作用:搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
⑥re.sub(pattern,repl,string ,count=0,flags=0)
函数作用: 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
re库的另一种等价用法
re.compile(pattern,flags=0)
pattern:正则表达式的字符串
lags:正则表达式使用时的控制标记
pat=re.compile('[1-9]\d{5}')
rst=pat.search('BIT 100081') # 这里的search可以换成上面的任何一个函数