目录
1. 什么是正则表达式
就是按照一定的规则去处理字符串的工具,这个规则叫正则表达式,它独立于任何编程语言之外,也就是说,任何编程语言都可以用正则表达式
2.在python中使用正则表达式
第一步:导入re正则库
import re第二步:定义正则规则以及要匹配的字符串
str1 = "Today is a good day' # 定义需要处理的字符串
pattern = "Today" # 定义一个正则规则
result = re.match(pattern,str1) # 使用正则匹配
第三步:进行校验得到结果
print(result)
print(result.group()) 将匹配到的内容提取出来
结果:
<re.Match object; span=(0, 5), match='Today'>
Today
re.match(正则规则, 匹配的字符)
从左往右进行匹配,如果符合规则,返回对象,如果没有匹配上,返回None
result.group() 将匹配到的内容提取出来(从左往右获取第一次匹配到的内容)
3.正则表示字符
字符 功能
. 匹配任意一个字符(除了\n)
[ ] 匹配[ ]列举的字符
\d 匹配数字,即0-9
\D 匹配非数字,即不是数字的其他字符
\s 匹配空白,即 空格、tab键、\n、\t
\S 匹配非空白
\w 匹配单词字符 注意:正则中的单词是指 a-z,A-Z,0-9
\W 匹配非单词字符
import re
print(re.match(".", "\nqwer")) # None
print(re.match("....", "qwerty")) # <re.Match object; span=(0, 4), match='qwer'>
print(re.match("\d", "qw999")) # None
print(re.match("\d\d\d\d", "9999")) # <re.Match object; span=(0, 4), match='9999'>
print(re.match("\D", "qw9999")) # <re.Match object; span=(0, 1), match='q'>
print(re.match("\D", "9999")) # None
print(re.match("\s","\tqw9999")) # <re.Match object; span=(0, 1), match='\t'>
print(re.match("\s","9999")) # None
print(re.match("\S","\tqw9999")) # None
print(re.match("\S","9999")) # <re.Match object; span=(0, 1), match='9'>
print(re.match("\w","\tqw9999")) # None
print(re.match("\w","_999")) # <re.Match object; span=(0, 1), match='_'>
4.正则表示数量
作用:用来限制规则在字符串中取值的长度,而不是限制字符串本身的长度
正则前面加r是为了避免出现对转义字符的处理
字符 功能
* 匹配前一个字符出现0次或者无限次,即可有可无 等价于{,}
+ 匹配前一个字符出现1次或者无限次,即至少有1次 等价于{1,}
? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有 {0,1}
{m} 匹配前一个字符出现m次
{m,} 匹配前一个字符至少出现m次
{m,n} 匹配前一个字符出现从m到n次
import re
print(re.match(r"\d*", "qwe")) # <re.Match object; span=(0, 0), match=''>
print(re.match(r"\d*", "1")) # <re.Match object; span=(0, 1), match='1'>
print(re.match(r"\d+", "qwe")) # None
print(re.match(r"\d+", "1233434994399333")) # <re.Match object; span=(0, 16), match='1233434994399333'>
print(re.match(r"\d?", "qwe")) # <re.Match object; span=(0, 0), match=''>
print(re.match(r"\d?", "187297845")) # <re.Match object; span=(0, 1), match='1'>
print(re.match(r"\d?[a-z]", "123qwe")) # None
print(re.match(r"\d+[a-z]", "123qwe")) # <re.Match object; span=(0, 4), match='123q'>
print(re.match(r"\d*[a-z]", "123qwe")) # <re.Match object; span=(0, 4), match='123q'>
print(re.match(r"\d?[a-z]+", "123456829490qwe")) # None
print(re.match(r"\d*[a-z]+", "123456829490qwe")) # <re.Match object; span=(0, 15), match='123456829490qwe'>
# 匹配一个字符出现的次数
print(re.match(r"\d{3}[a-z]", "123abcqwer")) # <re.Match object; span=(0, 4), match='123a'>
print(re.match(r"\d{3,}[a-z]", "1231212abzqwer")) # <re.Match object; span=(0, 8), match='1231212a'>
print(re.match(r"\d{3,5}[a-z]", "1231212abzqwer")) # None
print(re.match(r"\d{,}[a-z]", "1231212abzqwer")) # <re.Match object; span=(0, 8), match='1231212a'>
print(re.match(r"\d{,}[a-z]", "1231212abzqwer")) # <re.Match object; span=(0, 8), match='1231212a'>
print(re.match(r"\d{,}[a-z]", "abzqwer")) # <re.Match object; span=(0, 8), match='a'>
5.正则表示边界
字符 功能
^ 匹配字符串开头
$ 匹配字符串结尾
\b 匹配一个单词的边界:后面没字符或前面没有字符或前后都没有
\B 匹配非单词边界
import re
print(re.match(r"1[3-9]\d{9}$", "13181823848")) # 必须9个数字结尾 <re.Match object; span=(0, 11), match='13181823848'>
print(re.match(r"^1[3-9]\d{9}$", "13181823848")) # <re.Match object; span=(0, 11), match='13181823848'>
print(re.match(r"^\w+on\b", "python")) # <re.Match object; span=(0, 6), match='python'>
print(re.match(r"^.+on\b", "python")) # <re.Match object; span=(0, 6), match='python'>
print(re.match(r"^\w+\s\bon\b", "pyth on")) # <re.Match object; span=(0, 7), match='pyth on'>
print(re.match(r"^.+\s\b_ho\b", "pyt _ho n")) # <re.Match object; span=(0, 7), match='pyt _ho'>
print(re.match(r"^\w+\s\Bon\B", "pyth on")) # None
print(re.match(r"^\w+on\B", "pythons")) # <re.Match object; span=(0, 6), match='python'>
还有正则的匹配分组、正则高级用法、贪婪模式与非贪婪模式,见正则表达式第二部分,今天先写这么多啦。