re模块

re模块

 

一.正则表达式中的转义:

  "\" 表示转义符

    [()+*?/$.] 在字符组中一些特殊的字符会现出原形

    所有的\w \d \s (\n,\t) \W \D \S 都表示它原本的意义

    [-]只要卸载字符组的首位的时候表示普通的减号

  python中的转移符

  '\n':  '\' 赋予这个n一个特殊的意义,表示一个换行符

  r:表示取消转义

二.re模块

  1.findall:     re.findall('正则表达式','字符串')

      输出是一个列表里装着正则表达式切出来的一个个字符串

  例:

import re
ret = re.findall('\d+','545ds5444dsd545d')
print(ret) =>['545', '5444', '545']

  2.search:  re.search('正则表达式','字符串')

      输出的是正则表达式切除来的第一个符合条件的字符串

  例:

复制代码
#通过正则表达式拿第一个符合条件的值
ret1 = re.search('\d+','545dsd99sd545d')
print(ret1.group()) =>545

#通过.group 拿序号里面的值
ret1 = re.search('(\d)(\d)(\d)','545dsd99sd545d')
print(ret1.group()) =>545
print(ret1.group(1)) => 5
print(ret1.group(2)) => 4
print(ret1.group(3))=> 5
复制代码

  3.match:  re.match('正则表达式','字符串')

       和search类似,都是根据正则表达式返回第一个符合条件的字符串,但match只只针对第一个的数据类型必须和正则表达式相同,如果不容则报错

  例:

ret2 = re.match('\d+','545dsd99sd545d')
print(ret2.group()) =>545


ret2 = re.match('\d+','aa545dsd99sd545d')
print(ret2.group())=>AttributeError: 'NoneType' object has no attribute 'group'

  4.sub/subn:  re.sub('正则表达式','要替换的内容','执行的字符串')

      输出的是一个字符串

  例:

ret = re.sub('\d+','H','replace789nbc2xcz392zx')
print(ret) => replaceHnbcHxczHzx

ret = re.subn('\d+','H','replace789nbc2xcz392zx')
print(ret) => ('replaceHnbcHxczHzx', 3) #subn 会返回替换次数

  5.split:  re.split('正则表达式','字符串')

       输出的是一个列表中装着以正则表达式定义切割的多个字符串

       如果正则表达式用括号括起来,则输出的是一个列表中装着所有内容(包括要切掉的)

  例:

ret = re.split('\d+','alex83egon20taibai40')
print(ret) =>['alex', 'egon', 'taibai', '']

ret = re.split('(\d+)','alex83egon20taibai40')
print(ret) =>['alex', '83', 'egon', '20', 'taibai', '40', '']

  6.compile (会节省时间,适用于爬虫和自动化开发)

  只有在多次使用某一个相同的正则表达式的时候,这个compile才会提高程序的效率

  例:

re.findall('-0\.\d+|-[1-9]+(\.\d+)?','alex83egon20taibai40') 
# --> python解释器能理解的代码 --> 执行代码 ret = re.compile('-0\.\d+|-[1-9]\d+(\.\d+)?') res = ret.search('alex83egon-20taibai-40') print(res.group())

  7.finditer (会节省内存)

  例:

print(re.findall('\d','sjkhkdy982ufejwsh02yu93jfpwcmc'))
ret = re.finditer('\d','sjkhkdy982ufejwsh02yu93jfpwcmc')
for r in ret:
    print(r.group())

  8.分组命名

  例:

ret = re.search("<(?P<name>\w+)>\w+</(?P=name)>","<h1>hello</h1>")
print(ret.group('name'))=>h1

可以分组命名之后按名字拿值
ret = re.search('<(?P<a>\w+)>(?P<b>\w+)</(?P<c>\w+)>','<a>wahaha</b>')
print(ret.group('c')) => b

 

posted @ 2018-08-09 16:56  赵振宇  阅读(148)  评论(0编辑  收藏  举报