19-正则表达式

正则表达式用来匹配字符串的  在python中通过re模块实现  完成模糊匹配

 

正则表达式中的元字符  11个

.  通配符代表所有的字符  一个点只代表一个字符  . 可以匹配除了换行符(\n)以外的任意一个字符 

^ 只在字符串开始去匹配  其他位置有 不管

$ 只在字符结束去匹配,其他位置不管

* 重复匹配 重复前面的一个字符多次 0到多次  a*   等价于 {0,正无穷}

+ 重复匹配 重复前面的一个字符1到无穷多个 a+  z  等价于{1,正无穷}

?只能取0或1  对前面的一个字符   等价于{0,1}

{ }  匹配自己定义的数次 a{5} 五次 a{1,3}一次 两次  三次    贪婪匹配  p匹配最多的

[ ] 字符集  a[c,d]x      cd中二选一 匹配acx  adx  但不能匹配acdx   [a-z]表示一个范围中随便取一个 

取消元字符的特殊功能   [w,*] 这样就可以匹配*号了  \ ^ - 这三个字符例外  

在[]中不用写逗号, 写了逗号之后,逗号也会进入匹配的行列

[^t]匹配除t以外的所有字符  [^4,5]匹配除(4,5,,)以外的所有字符

|  或 指明两项之间的一个选择

() 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用

\   反斜杠后边跟元字符去除特殊功能 跟普通字符实现特殊功能

\d  匹配任何十进制数字  相当于[0-9]

\D 匹配任何非数字字符  相当于[^0-9]

\s 匹配任何空白字符  相当于[\t\n\r\f\v]

\S 匹配任何非空白字符 相当于[^\t\n\r\f\v]

\w 匹配任何字母数字字符  相当于[0-9a-zA-Z]

\W 匹配任何非字母数字字符 相当于[^0-9a-zA-Z]

\b 匹配一个特殊字符边界 也就是指字符和特殊字符间的位置

前面要加上r  的原因 是因为\b在python解释器中存在特殊意义 要加上r把原生字符串输入进去

类似于后面对\的匹配

ret = re.findall(r'I\b', 'I am a boyIa')
print(ret)

ret = re.findall(r'\bI', ' I am a boyIa')
print(ret)

['I']  
['I']

 

[a-z] //匹配所有的小写字母 
[A-Z] //匹配所有的大写字母 
[a-zA-Z] //匹配所有的字母 
[0-9] //匹配所有的数字 
[0-9\.\-] //匹配所有的数字,句号和减号 
[ \f\r\t\n] //匹配所有的白字符
#匹配除满足条件的第一个结果
ret=re.search('sb', 'sbtring, flagssb')
print(ret.group())

sb

 关于匹配\图解

由于python解释器和re解释器中的\都有特殊意义 。  当'\\\\'传入python解释器中  实际传入re解释器中的就只有'\\'

当加上r'\\' 传入python解释器的就不会变化  还是\\  

 

分组的应用:

ret=re.search('(?P<id>\d{3})/(?P<name>\w{3})','wdadasdaw123/ooo')
print(ret.group())
print(ret.group('id'))
print(ret.group('name'))

123/ooo
123
ooo

 

正则表达式的方法:

1 findall(): 所有的结果都返回到一个列表里

2 search() 返回匹配到的第一个对象 对象可以调用group()返回结果

3 match() 只在字符串开始匹配 返回匹配到的第一个对象 对象可以调用group()返回结果
4split()

ret=re.split('[sn]', 'sdsdsdnfsfnggn')
print(ret)

['', 'd', 'd', 'd', 'f', 'f', 'gg', '']
5 sub() sub('a..x','s..b','aaalexxxxxxxxx')

 

6. compile(‘’) 把正则表达式编译称一个正则表达式对象

后面可以直接 正则表达式对象.直接调用方法。 用于一个正则表达式重复使用的时候

 

7.finditer  返回一个迭代器对象  next(ret).group()

posted on 2019-04-14 16:55  Zhw_forever  阅读(182)  评论(0编辑  收藏  举报