正则检测类符号
1) \b - 检测是否是单词边界
"""
单词边界:凡是可以将两个单词区分开的符号都是单词边界,例如:空白字符、标点符号对应的字符、字符串的开头和结尾
注意:检测类符号是在匹配成功的情况下,看检测类符号所在的位置是否符合要求
“”"
from re import *
re_str = r'abc\b123'
print(fullmatch(re_str, 'abc 123')) # None 检测不影响匹配的长度,并且自相矛盾
2) \B - 检测是否不是单词边界
print('---------b--------')
re_str = r'\b\d\d\b'
result = findall(re_str, '99shj23结果 45 计时开始67,数据,89.计算机90l 78')
print(result)
print('---------B--------')
re_str = r'\B\d\d\B'
result = findall(re_str, '99shj23结果 45 计时开始67,数据,89.计算机90l 78')
print(result)
3) ^ - 检测是否是字符串开头
re_str = r'^\d\d'
result = findall(re_str, '99shj23结合实际 45 计时开始67,数据,89.计算机90l 78')
print(result)
4) $ - 检测是否是字符串结尾
re_str = r'\d\d$'
result = findall(re_str, '99shj23结合实际 45 计时开始67,数据,89.计算机90l 78')
print(result)
re_str = r'^\d\d\d$'
匹配次数
"""
三个a:‘aaa’ == ‘a{3}’
三个数字:’\d\d\d’ == ‘\d{3}’
2到5个大写字母:’[A-Z]{2,5}’
“”"
1. * - 0次或者多次(任意次数)
"""
a* - a出现0次或多次
\d* - \d出现0次或多次,每次的\d可以使任意一个数字,例如:1;12;123
[abc]* - [abc]出现0次或多次,每次的[abc]都可以是a、b、c中任意一个,例如:a;ab;aba;accb
“”"
re_str = r'a\d*b'
print(fullmatch(re_str, 'ab'))
print(fullmatch(re_str, 'a1b'))
print(fullmatch(re_str, 'a123b'))
2. + - 1次或者多次(至少一次)
re_str = r'a\d+b'
print(fullmatch(re_str, 'ab')) # None
print(fullmatch(re_str, 'a1b'))
print(fullmatch(re_str, 'a123b'))
3. ? - 0次或者1次
re_str = r'[-+]?[1-9]\d'
print(fullmatch(re_str, '+16'))
print(fullmatch(re_str, '-16'))
print(fullmatch(re_str, '16'))
4. {}
"""
{N} - 匹配N次
{M,N} - 匹配M到N次,M和N都能取到
{M,} - 匹配至少M次
{,N} - 匹配最多N次
“”"
re_str = r'1a{2,5}2'
print(fullmatch(re_str, '1aaaaa2'))
re_str = r'1a{3}2'
print(fullmatch(re_str, '1aaa2'))
5.贪婪和非贪婪
"""