目录
今日总结
一、正则匹配符号
1. 什么是正则(正则表达式)
正则是一种用来处理文本数据的一种工具.(一般用于处理复杂的文本问题)
2. 正则的语法
用不同的符号来描述字符串规则
-
匹配类符号
-
检测类符号
-
控制次数的符号
-
分组和分支
-
其他常用参数
fullmatch(正则表达式,字符串) - 检测字符串是否符号正则表达式描述的规则,如果不符合返回None
'正则表达式' - python "正则表达式" - 0C/python /正则表达式/ - js
3. 匹配类符号
一个符号对应字符串的一个字符
1) 普通字符 - 特殊符号以外的字符就是普通字符
普通字符在正则中表示这个符号本身
re_str = 'abc' # 需要一个长度是3的字符串,并且第一个字符是a,第二个字符是b,第三个字符是c
print(fullmatch(re_str, 'abc'))
2) 特殊字符 . - 匹配一个任意字符
re_str = 'a.c' # 需要一个长度是3的字符串,并且第一个字符是a,最后字符是c,中间是任意字符
print(fullmatch(re_str, 'acc'))
3) 特殊字符 \d - 匹配任意一个数字字符
re_str = r'ab\d' # 需要一个长度是3的字符串,并且前两个字符是ab,ab后面是任意一个数字
print(fullmatch(re_str, 'ab5'))
4) 特殊字符 \w - 官方文档:匹配任意一个数字、字符或者下划线(基于ASCCI码),实际中文也可以
re_str = r'\w123'
print(fullmatch(re_str, '好123'))
5) 特殊字符 \s - 匹配任意一个空白字符
空白字符 - 空格、\t、\n
re_str = r'123\sabc'
print(fullmatch(re_str, '123mabc')) # None
6) 特殊字符 \D、\S、\W
\D - 匹配任意一个非数字字符
\S - 匹配任意一个非空白字符
print(fullmatch(r'abc\S123', 'abc-123'))
7) [字符集] - 匹配字符集中的任意一个字符
写法 | 注释 |
---|---|
[ab12] | 匹配a、b、1或者2中任意一个字符 |
b\d]、[\dab]、[a\db]、[ab0123456789] | 匹配a、b、或者0到9中任意一个字符 |
[0-9] | 匹配0到9中任意字符 |
[56789]、[5-9] | 匹配5到9中任意一个字符(前一个字符比后一个字符小) |
[A-Z] | 匹配任意一个大写字母 |
[a-z] | 匹配任意一个小写字母 |
[a-zA-Z] | 匹配任意一个字母 |
[a-zA-Z\d_] | 匹配任意一个字母、数字、下划线 |
[\u4e00-\u9fa5] | 匹配任意一个中文 |
注意:
- 如果[]中 - 在两个字符之间表示范围,如果 - 不在两个字符之间,它不具备特殊功能表示这个符号本身,在[]外面也是普通符号
- 正则表达式中不能随意添加空格
re_str = r'a[xyz]b'
print(fullmatch(re_str, 'ayb'))
print(fullmatch(r'abc[2-5]', 'abc4'))
print(fullmatch(r'[\u4e00-\u9fa5]', '博'))
# print(fullmatch(r'[z-a]bb', 'ybb')) # 范围错误[z-a],报错!re.error: bad character range z-a at position 1
print(fullmatch(r'[-ac]tt', '-tt'))
8) [^字符集] - 匹配除了字符集以外的任意一个字符
注意:
如果[]中 ^ 在最前面表示除了字符集以外的任意一个字符,如果 ^ 不在最前面,它不具备特殊功能表示这个符号本身
print(fullmatch(r'[^a]123', 'b123'))
print(fullmatch(r'[^A-Za-z]85', '=85'))
二、检测类符号
检测类的符号在正则中不影响字符串长度,它们的作用是在匹配成功之后检测检测类符号所在的位置是符合要求
1. \b
检测是否是单词边界
单词边界 - 凡是能够将两个单词区分开的所有符号,主要有:空白、标点符号、字符串开头和字符串结尾
re_str = r'abc\b123'
print(fullmatch(re_str, 'abc 123')) # None 检测类字符串不影响长度。此正则表达式长度是6,写法矛盾
re_str = r'abc \b123'
print(fullmatch(re_str, 'abc 123')) # <re.Match object; span=(0, 7), match='abc 123'>
re_str = r'abc\b.123'
print(fullmatch(re_str, 'abc,123'))
str1 = '数据集,890,sha323节省时间34jsj 922 湿巾是-8会计28'
result = findall(r'\b\d+\b', str1)
print(result) # ['890', '922']
2. \B
检测是否不是单词边界
str1 = '数据集,890,sha323节省时间34jsj 922 湿巾是-8会计28'
result = findall(r'\B\d+\B', str1)
print(result) # ['9', '323', '34', '2', '2']
3. ^
检测是否是字符串开头([]外面)
re_str = r'\dabc'
print(search(re_str, '啥撒旦2abc防辐射')) # <re.Match object; span=(3, 7), match='2abc'>
print(findall(re_str, '啥撒旦2abc防辐射')) # ['2abc']
re_str = r