re模块(正则表达式)
- 就其本质而言,正则表达式是一种小型的、高度专业化的编程语言
- 在Python中(它内嵌在python中),并通过re模块来实现,正则表达式被编译成一系列的字节码,然后由C编写的匹配引擎执行
正则:模糊匹配(针对字符串的一些操作),匹配的是这些元素的共性
字符匹配(普通字符,元字符)
1.普通字符:大多数字符和字母都会和自身匹配
import re print(re.findall('alex', 'aabuscdalexduye')) #执行结果: ['alex']
2.元字符: . ^ * + ? {} [] | () \
. 通配符(除了换行符\n),一个点代表一个字符
import re print(re.findall('a.x', 'a0xuscdaexduayx')) print(re.findall('a..x', 'a01xuscdabexduayx')) print(re.findall('a...x', 'a01xuscdabexduayx')) #执行结果: ['a0x', 'aex', 'ayx'] ['a01x', 'abex'] []
^ 在字符串的开头进行内容匹配
import re print(re.findall('a.x', 'awxuscdaexduayx')) print(re.findall('^a.x', 'awxuscdaexduayx')) print(re.findall('^a.x', 'axuscdaexduayx')) #执行结果: ['awx', 'aex', 'ayx'] ['awx'] []
$ 在字符串的结尾进行内容匹配
import re print(re.findall('a.x', 'awxuscdaexduayx')) print(re.findall('a.x$', 'awxuscdaexduayx')) print(re.findall('a.x$', 'axuscdaexduax')) #执行结果: ['awx', 'aex', 'ayx'] ['ayx'] []
重复符号:* + ? {}
* 代表 [0,∞)
+ 代表 [1, ∞]
import re print(re.findall('alex*', 'aledhabeafaalexxg')) #x的个数大于等于0便可以进行匹配 print(re.findall('alex+', 'aledhabeafaalexxg')) #x的个数大于等于1便可以进行匹配 #执行结果: ['ale', 'alexx'] ['alexx']
? 代表 [0, 1]
import re print(re.findall('alex?', 'aledhabeafaalexxg')) #x的个数等于0或者1便可以进行匹配 #执行结果: ['ale', 'alex']
{} 可以表示任何范围
{0,} ==> *
{1,} ==> +
{0,1} ==> ?
import re print(re.findall('alex{0,}', 'aledhabeafaalexxg')) print(re.findall('alex{1,}', 'aledhabeafaalexxg')) print(re.findall('alex{0,1}', 'aledhabeafaalexxg')) #执行结果: ['ale', 'alexx'] ['alexx'] ['ale', 'alex']
#注意:* + ?等是贪婪匹配,也就是尽可能匹配,后面加?使其变成惰性匹配(所谓惰性匹配,是指最少匹配)
import re print(re.findall('alex*', 'aledhabeafaalexxg')) #x大于等于0便可以匹配 print(re.findall('alex*?', 'aledhabeafaalexxg')) #x等于0匹配 print(re.findall('alex+', 'alexxxdhalebeafaalexxg')) #x大于等于1便可以匹配 print(re.findall('alex+?', 'alexxxdhalebeafaalexxg')) #x等于1匹配 print(re.findall('alex?', 'aledhabeafalexaalexxg')) #x等于0或者1可以匹配 print(re.findall('alex??', 'aledhabeafalexaalexxg')) #x等于0匹配 #执行结果: ['ale', 'alexx'] ['ale', 'ale'] ['alexxx', 'alexx'] ['alex', 'alex'] ['ale', 'alex', 'alex'] ['ale', 'ale', 'ale']
扫描二维码关注公众号,回复:
5530843 查看本文章
[] 字符集:在字符集中,没有特殊符号(在字符集里有功能的符号:- ^ \)
import re print(re.findall('x[yz]c', 'xycssxcxzc')) #出现在字符集中的字符是或的关系 #执行结果: ['xyc', 'xzc']
import re print(re.findall('x[z*]c', 'x*cssxcxzzc')) #在字符集中,*没有特殊含义,只代表一个字符而已 #执行结果: ['x*c']
在字符集里有功能的符号:- 代表的意思是范围
import re import re print(re.findall('x[abcdef]x','bamxadxbxaaxcxmm')) print(re.findall('x[a-f]x','bamxadxbxaaxcxmm')) print(re.findall('x[a-f]*x','xbamxadxbxaaxcxmmx')) #执行结果: ['xbx', 'xcx'] ['xbx', 'xcx'] ['xadx', 'xaax']
在字符集里有功能的符号:^ 代表的意思是非
import re print(re.findall('x[a-z]x','bamxaxbx1xcxmm')) print(re.findall('x[^a-z]x','bamxaxbx1xcxmm')) #执行结果: ['xax', 'xcx'] ['x1x']
在字符集里有功能的符号: \
- \后边跟元字符为去除特殊功能,比如\.
- \后边跟普通字符为实现特殊功能,比如\d
- \d 匹配任何十进制数,它相当于类[0-9]
- \D 匹配任何非数字字符,它相当于类[^0-9]
- \s 匹配任何空白字符,它相当于类[\t\n\r\f\v]
- \S 匹配任何非空白字符,它相当于类[^\t\n\r\f\v]
- \w 匹配任何字母数字字符,它相当于类[a-zA-Z0-9]
- \W 匹配任何非字母数字字符,它相当于类[a-zA-Z0-9]
- \b 匹配一个特殊字符边界,比如空格,&,#等