Python正则表达式实例详解

一、正则表达式语法

正则表达式是用匹配或者描述字符串的工具。

用处:
a.判断字符串是否满足某个条件---判断输入的字符串是否是邮箱/手机号码。是否是ip地址
b.提取满足条件的字符串
c.字符串替换

Python中通过re模块中相应的方法来支持正则表达式的匹配、查找和替换等功能

from re import fullmatch

fullmatch(正则表达式字符串, 字符串) ---> 判断正则表达式和字符串是否完全匹配
正则表达式字符串: 就是一个字符串,字符串中是正则表达式语法。r'正则表达式'
正则表达式中包含两个部分,一个是正则语法对应的字符,二个是普通字符

1 .(点)(匹配任意字符)

一个.只匹配一个任意字符

# 匹配一个长度是3的字符串,第一个字符是'a', 第二个字符是任意字符,最后一个字符是b re_str = r'a.b' result = fullmatch(re_str, 'a|b') print(result) # 匹配一个长度是4,第一个字符和最后一个字符分别是a和b,中间两个字符是任意字符的字符串 re_str = r'a..b' result = fullmatch(re_str, r'a\nb') print(result) 2 \w(匹配字母数字下划线)

一个\w匹配一个字符

# 匹配一个第一个字符是数字字母或者下划线,后面三个字符是任意字符的字符串 re_str = r'\w...' result = fullmatch(re_str, 'o8js') print(result) 3 \s(匹配任意空白字符)

空白字符: 空格、制表符(\t)、回车(换行\n)等,都输入空白字符
一个\s匹配一个空白字符

# 匹配一个第一个字符是a,第二个字符是空白,最后一个字符b的字符串 re_str = r'a\sb' result = fullmatch(re_str, 'a\nb') print(result) 4 \d(匹配数字字符) re_str = r'\d\d\d' result = fullmatch(re_str, '282') print(result) 5 \b(检测边界)

一个\b不会去匹配一个字符,而是单纯的检测\b出现的位置是否是单词边界
单词边界: 字符串开始和结尾、空格、换行、标点符号等,可以将两个单词隔开的字符都单词边界

re_str = r'\babc' re_str = r'abc\b\saaa' # 匹配一个字符串前三位是abc,第四位是空白字符,后面是aaa。并且要求c后面是单词边界 result = fullmatch(re_str, 'abc aaa') print(result) 6 ^(检测是否是字符串开头)

re_str = r'^\d\d\d' # 判断一个字符串是否是三个数字开头

result = fullmatch(re_str, '123') print(result) 7 $(检测是否是字符串结尾) re_str = r'abc$' result = fullmatch(re_str, 'abc') print(result) 8 \W(匹配非字母、数字下划线) re_str = r'\Wabc' result = fullmatch(re_str, '#abc') print(result) 9 \S(匹配非空白字符) re_str = r'\S...' result = fullmatch(re_str, '2jkh') print(result) 10 \D(匹配非数字字符) re_str = r'\D\w\w\w' result = fullmatch(re_str, '#h7_') print(result) 11 \B(检测是否不是单词边界) re_str = r'and\BYou' result = fullmatch(re_str, 'andYou') print(result) 12 [] (匹配中括号中出现的任意一个字符)

一个[]匹配一个字符
[字符集] --> 匹配一个字符,这字符是字符集中的任意一个字符
例如:[abc], [\d+]

[字符1-字符2] --> 匹配一个字符,这个字符是Unicode编码值在字符1到字符2中的任意一个字符;要求字符1的编码值要小于字符2
例如:[1-9] --> 数字1到9 [a-z] --> 小写字母 [A-Z] --> 大写字母
[\u0031-\u0039] --> 数字1到9
[\u4E00-\u9fa5] --> 匹配所有的汉字

注意:-在中括号中,如果放在两个字符之间表示范围。

"""匹配一个字符串第一个字符是a或者b或c,后边三个a""" re_str = r'[abc]aaa' result = fullmatch(re_str, 'caaa') print(result) re_str = r'[1-4]\d\d\d' result = fullmatch(re_str, '1989') print(result) re_str = r'[\u0031-\u0039][a-z]' result = fullmatch(re_str, '1h') print(result) re_str = r'[\u4E00-\u9fa5][\u4E00-\u9fa5][\u4E00-\u9fa5]' result = fullmatch(re_str, '就深刻') print(result) re_str = r'[91-]' result = fullmatch(re_str, '-') print(result) # 匹配一个字符,是字母数字下划线或者是空白 re_str = r'[\w\s]' result = fullmatch(re_str, 'u') print(result) 13 [^字符集] (匹配一个不在字符集中的任意字符)

注意:^必须放在中括号中的最前面才有效

"""匹配一个四位的字符串,第一位不是abc中的任意一个,后面三位是任意字符""" re_str = r'[^abc]...' re_str = r'[^1-9]...' result = fullmatch(re_str, '898i') print(result) 二、正则表达式次数相关符号

from re import fullmatch

1. *(匹配0次或者多次)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b28b6aceda5668de3729d2fc793c76b1.html