python(33)——【re模块】

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']

 

[] 字符集:在字符集中,没有特殊符号(在字符集里有功能的符号:- ^ \)

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 匹配一个特殊字符边界,比如空格,&,#等
posted @ 2019-03-14 11:44  小伙郭  阅读(292)  评论(0编辑  收藏  举报