今天主要学习正则表达式,正则表达式就是用来检测字符串是否满足某种规则的工具。
1、正则语法
python对正则表达式的支持,提供了一个内置模块:re。
fullmatch(正则表达式,字符串):判断整个字符串是否符合正则表达式规则。
- 匹配任意字符
匹配一个字符串,只有一位字符并且这个字符是任意字符。
from re import fullmatch
re_str = r'.'
result = fullmatch(re_str, 'a')
print(result)
- \w 匹配字母数字下划线。
匹配一个字符串,前三位分别是abc,最后两位是字母数字或者下划线。
from re import fullmatch
re_str = r'abc\w\w'
result = fullmatch(re_str, 'abc2g')
print(result)
- \s 匹配空白字符(空白指空格、制表符(\t)和回车(\n)等所有能产生空白的字符)
匹配一个字符串,前三位是字母数字下划线第四位是一个空白字符最后一位是任意字符。
from re import fullmatch
re_str = r'\w\w\w\s.'
result = fullmatch(re_str, 'hu2\t?')
print(result)
- \d 匹配一个数字字符
匹配一个字符串,前三位是数字字符,最后一位是任意字符。
from re import fullmatch
re_str = r'\d\d\d.'
result = fullmatch(re_str, '782L')
print(result)
- \b 检测是否是单词边界(单词的开头、单词的结尾、单词和单词之间的标点空格等)。
注意:正则中遇到\b,匹配的时候先不管它,匹配成功后再回头看\b位置是否是单词边界。
匹配一个字符串是前四位是when,第五位是空白,空白后边是where。并且第四位n的后面是个单词边界。
from re import fullmatch
re_str = r'when\b\swhere'
result = fullmatch(re_str, 'when where')
print(result)
- ^ 检测字符串是否以给定的正则表达式开头
匹配一个字符串,是否以两个数字字符开头
from re import fullmatch
re_str = r'^\d\d'
result = fullmatch(re_str, '23')
print(result)
- $ 检测字符串是否以给定的正则表达式结束
匹配一个字符串a数字,并且a数字是字符串的结尾
from re import fullmatch
re_str = r'a\d$'
result = fullmatch(re_str, 'a8')
print(result)
- \W,\S,\D,\B 都是对应小写语法的否定或者非。
- [] 匹配中括号中出现的任意字符
注意:一个中括号只匹配一个字符
from re import fullmatch
re_str = r'[abc+]\d\d'
result = fullmatch(re_str, '+67')
print(result)
- "-" 在正则中的中括号中的应用:如果将减号放到两个字符的中间代表的是谁到谁。如果想要表示'-'符号本身,就放在开头或者结尾。
from re import fullmatch
re_str = r'[1-8][a-z][a-z]'
result = fullmatch(re_str, '2hn')
print(result)
- [^字符集] 匹配不在[]字符集中的任意一个字符
from re import fullmatch
re_str = r'[^A-Z\d]abc'
result = fullmatch(re_str, '#abc')
print(result)
- "*" 匹配0次或者多次
from re import fullmatch
re_str = r'a*b'
print(fullmatch(re_str, 'aaaaab'))
- "+" 匹配1次或者多次(至少一次)
from re import fullmatch
re_str = r'[1-9]+\d*'
print(fullmatch(re_str, '1010'))
- ? 匹配0次或者一次
from re import fullmatch
re_str = r'@?\d+'
print(fullmatch(re_str, '@16723'))