1 概述
- 正则表达式是一个特殊的字符序列,方便检查一个字符串是否与某种模式匹配
- 以下仅为日常使用部分
1.1 模式 pattern
常用模式 | 描述 | 举例 |
---|
^ | 匹配字符串的开头 | |
$ | 匹配字符串的末尾 | |
. | 匹配任意字符,除了换行符 | |
a|b | 匹配 a 或者 b | |
[..] | 匹配一组字符,如:[abc]:匹配 a、b、c | 反例 = [^..] |
* | 匹配 0 个或 多个表达式 | |
+ | 匹配 1 个或 多个表达式 | |
? | 匹配 0 个或 1 个表达式 | |
{n} | 匹配 n 个表达式 | |
{n, m} | 匹配 n 至 m 个表达式 | |
{n, } | 匹配 >= n 个表达式 | |
\w | 匹配字母、数字及下划线 | 反例 = \W |
\s | 匹配任意空白字符 | 反例= \S |
\d | 匹配任意数字,等价 [0-9] | 反例 = \D |
a-z | 匹配小写字母 a,b,c 一直到 z | |
A-Z | 匹配大写字母 A,B,C 一直到 Z | |
0-9 | 匹配数字 0,1,2 一直到 9 | |
import re
s1 = re.search('[ab]+', 'www.baidu.com')
print(s1.group())
1.2 标志位 flags
修饰符 | 描述 |
---|
re.I | 使匹配对大小写不敏感 |
re.S | 使 . 匹配包括换行在内的所有字符 |
import re
m1 = re.match('WWW', 'www.baidu.com')
m2 = re.match('WWW', 'www.baidu.com', re.I)
m3 = re.match('www.', 'www\nbaidu.com')
m4 = re.match('www.', 'www\nbaidu.com', re.S)
print(m1)
print(m2)
print(m3)
print(m4)
2 语法
2.1 match():从起始位置开始匹配
re.match(pattern, string, flags=0)
import re
m1 = re.match('www', 'www.baidu.com')
m2 = re.match('baidu', 'www.baidu.com')
print(m1)
print(m2)
print(m1.span())
print(m1.group())
2.2 search():匹配整个字符串,找到第一个匹配
re.search(pattern, string, flags=0)
import re
s1 = re.search('www', 'www.baidu.com')
s2 = re.search('com', 'www.baidu.com')
s3 = re.search('xxx', 'www.baidu.com')
print(s1)
print(s2)
print(s3)
print(s1.span())
print(s1.group())
2.3 compile():按正则模式匹配字符串
re.compile(pattern[, flags])
import re
patter_format = re.compile(r'\d+')
print(patter_format.match('阿梦520', 2, 5))
2.4 findall():匹配所有字符串
- match 和 search 是匹配一次,findall 是匹配所有
re.findall(string[, pos[, endpos]])
re.finditer(pattern, string, flags=0)
import re
f1 = re.findall(r'\d+', '阿梦520 - 1314', 2)
print(f1)
2.6 finditer():findall 的迭代器
import re
f1 = re.finditer(r'\d+', '阿梦520 - 1314', 2)
for m in f1:
print(m.span(), m.group()
2.7 sub():替换字符串
re.sub(pattern, repl, string, count=0, flags=0)
import re
str = '阿梦:151-2345-6789'
s1 = re.sub('\D+', '', str)
print(s1)
2.8 split():拆分字符串
re.split(pattern, string[, maxsplit=0, flags=0])
import re
s1 = re.split(r'\W+', '阿梦,520,阿优')
print(s1)
3 实例
3.1 去除汉字
import re
str_test = 'abcABC_(123).这是一个汉字'
s1 = re.sub('[^a-zA-Z_0-9().]+', '', str_test)
s2 = re.sub('[a-zA-Z_0-9().]+', '', str_test)
print(f'去除汉字后:{s1}')
print(f'只保留汉字:{s2}')