Python中使用正则表达式:re模块

简介

正则表达式可以按照一定的规则(模式)对文本进行处理,Python中可以通过自带的re模块使用正则表达式。re模块无需安装直接import re


正则表达式的基础语法

元字符

[] 字符集内的一个字符
^ 字符串开头, 放在字符集[]内的开头位置则表示补集合,除……之外
$ 字符串结尾或者换行字符后面的任何位置
| 多个字符集的或
() 分组

转义字符

\ 转义字符后+元字符可取消元字符,转化为普通字符
\ 转义字符+不同字符表示特别含义
\d 匹配任何十进制数 [0-9]
\D 匹配任何非数字字符 [^0-9]
\s 匹配任何空白字符 [\t\n\r\f\v]
\S 匹配任何非空白字符 [^\t\n\r\f\v]
\w 匹配任何字母数字字符 [a-zA-Z0-9]
\W 匹配任何非字母数字字符 [^a-zA-Z0-9]

重复次数

? 0或1次,也可以用来表示非贪婪匹配

  • 0次及以上
  • 1次及以上
    {2} 重复2次
    {2-3} 重复2-3次

编译标志-flags

DOTALL,S 使.匹配换行在内的所有字符
IGNORECASE,I 使匹配对大小写不敏感
MULTINE,M 多行匹配


re的常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 将正则表达式进行编译后,提高程序执行效率
# re.I 不区分大小写
re.compile(r"[ae]bc", re.I)

# findall返回一个包含匹配字符串的列表,无匹配结果则返回空列表
re.findall(r'[ae]bc', 'abc bbc cdc dbc ebc') # 返回['abc', 'ebc']
re.findall(r'[^ae]bc', 'abc bbc cdc dbc ebc') # 返回['bbc', 'dbc']

# finditer 返回一个迭代器
result = re.finditer(r'[ae]bc', 'abc bbc cdc dbc ebc')
next(result)

# search 扫描字符串,找到匹配位置, 只返回第一次匹配到的位置
result = re.search(r'[ae]bc', 'abc bbc cdc dbc ebc')
result.group()
result.start()
result.end()
result.sapn()
re.search(r'[e]bc', 'abc bbc cdc dbc ebc')

# match 扫描字符串,仅在开头看是否能匹配
re.match(r'[ae]bc', 'abc bbc cdc dbc ebc').group()
re.match(r'[e]bc', 'abc bbc cdc dbc ebc')

# fullmatch(>=Python3.4) 匹配整个字符串,返回匹配结果或NoneType
re.fullmatch(r'.*bc', 'abc bbc cdc dbc ebc')

# split 用正则进行切割
re.split(r'[\+\-\*\\]', 'abc+bbc-cdc*dbc\ebc')

# sub 替换匹配正则表达式的字符串
re.sub(r'[ae]bc', '1', 'abc bbc cdc dbc ebc', count=1)

# subn 替换的同时,在结果中返回一个替换次数的值
re.subn(r'[ae]bc', '1', 'abc bbc cdc dbc ebc', count=2)

That’s all.
Happy writing!