26 转义符 re模块 方法 random模块 collection模块的Counter方法

主要内容 :

1 . 正则表达式中的转义和 python中的转义符

  a: 正则表达式中的转义符

    '('  : 表示匹配小括号

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

    所有的d w s( t)  都表示原本的意义

    [-]只有写在字符组的首位的时候表示普通的减号,写在其他位置表示范围[1-9],如果想匹配减号[1-9]

  b: python中的转义符

    ' ' :表示转义符,赋予了n一个特别的意义  , 表示一个换行符

print('C:
ext')       #这个时候
表示换行   C:   换行ext
print(r'C:
ext')      #这个时候加一个r就取消转义.

 2. re模块的方法

  a: findall  ,   search ,  match 

    findall  : 返回值类型 : 列表  ,如果没有匹配到结果,就返回一个空的列表

import re
res = re.findall('d+','serdd234asdwer89')
print(res)
# 参数 :          正则表达式,字符串
#返回值类型 :     列表
# 返回值的个数 :  1
ret= re.findall('s+','serdd234asdwer89')
print(ret)
#如果没有匹配到结果,就返回一个空的列表

    serach  : 返回值类型: 正则匹配结果的对象,如果没有匹配到对象,返回none

import re
re1 = re.search('d+', 'qwert123yuiop789')
print(re1)
print(re1.group())
#返回值类型 : 正则匹配结果的对象, 通过对象.group方法获取匹配到的第一个结果
re2 = re.search('s', 'qwert123yuiop789')
print(re2)         #
print(re2.group())
# 如果没有匹配到对象,就会返回none , 在再执行group会报错.

    match  : match只有在开始位置匹配成功的话,才有返回,如果不在开始位置匹配成功的话,就返回none

import re
re1 = re.match('d+','1234qwert123')
print(re1)    #在这个时候match和search是一样的
print(re1.group())
re2 = re.match('d+','wertt24')
print(re2)    #只检测re是不是在字符串的开始位置匹配,如果没有,返回none

  b: sub     ,    subn   ,  split

   sub : 参数: 正则表达式,  替换被取代的内容,还可以指定被替换的次数.

import re
re1 = re.sub('d+','12','12345sdf345er',1)
#参数: 正则表达式, 替换被匹配的内容,还可以指定要替换的几次.

   subn:参数: 正则表达式,  替换被取代的内容 ; 返回值: 返回值是一个元祖,  可以显示替换的次数

re2 = re.subn('d+','aa','3456ffff23')
#参数: 正则表达式, 替换被取代的内容.
# 返回值中显示替换的次数.
print(re1)   #12sdf345er
print(re2)   #('aaffffaa', 2)

     split : 切割,参数 : 正则表达式,字符串.返回值:是一个列表.

import re
re1 = re.split('d+','123der456yui789')
# 参数 : 正则表达式,字符串
#返回值: 列表
print(re1)    #['', 'der', 'yui', '']

  c: complie   finditer   : 用于爬虫,自动化开发

     complie : 编译,节省时间 : 只有在多次使用某一个相同的正则表达式的时候,这个compile才会帮助我们提高程序的效率

import re
re1 = re.compile('d+.d+')
re2 = re1.search('12.34.456.5')
print(re2)
print(re2.group())

    finditer:  参数:正则表达式,  字符串 ;  返回的结果:  迭代器; 节省空间效率.

import re
re1 = re.finditer('d+.d+','12.34.456.5')
print(re1)  #返回一个迭代器的对象
for r in re1:               #r是正则匹配结果对象<_sre.SRE_Match object; span=(0, 5), match='12.34'>
    print(r.group())

3. 当分组遇到findall , split , search

  findall:  会优先显示分组中的内容,要想取消分组优先,(?:正则表达式)

import re
re1 = re.findall('d+(.d+)?','wert32tig34.12er')      # 当分组遇到findall, 会显示分组里的内容.
re2 = re.findall('d+(?:.d+)?','wert32tig34.12er')    #当在分组里加上?:可以取消只显示分组的内容,正常显示.
print(re1)            #['', '.12']
print(re2)            #['32', '34.12']

    一道题: 显示所有的整数

# 显示所有的整数
import re
ret=re.findall(r"d+(?:.d+)|(d+)","1-2*(60+(-40.35/5)-(-4*3))")
print(ret)                               ['', '', '', '.35', '', '', '']        
ret.remove('')                           ['1', '2', '60', '', '5', '4', '3']
print(ret)                               ['1', '2', '60', '5', '4', '3']

  split:  遇到分组 会保留分组内被切掉的内容

import re
re1 = re.split('d+(w)', '21asd为sffdf')   #根据21a切割, 保留分组里的内容
print(re1)   #['','a', 'sd为sffdf']

  search:  如果search中有分组的话,通过group(n)就能够拿到group中的匹配的内容

import re
re1 = re.search('d+(.d+)(.d)','ser1.23.42.89wer')
print(re1)
print(re1.group())
print(re1.group(1))
print(re1.group(2))

    一道题:

import re
ret = re.search(r'<(w+)>(w+)</(w+)>',r'<a>wahaha</b>')
print(ret.group())                #<a>wahaha</b>
print(ret.group(1))               #a
print(ret.group(2))               #wahaha
print(ret.group(3))               #b

4. 正则表达式的进阶: 分组命名

  分组命名(?P<name>正则表达式)      表示给分组起名字

  (?P=name):                     表示使用这个分组, 这里匹配到的内容应该和分组中的内容相同

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

  通过索引使用分组:          1 表示使用第一组匹配到的内容必须和第一组中的内容完全相同.

import re
ret = re.search(r'<(w+)>w+</1>','<h1>hello</h1>')
print(ret.group(1))          #h1
print(ret.group())         #h1>hello</h1

5. random模块   

  随机: 在某个范围内取到每一个值得概率是相等的

  a : 随机小数

    random.random()             0-1之内的随机小数

import random
print(random.random())       #0.45057792992073786

    random.uniform(1,5)        任意范围之内的随机小数  

import random
print(random.uniform(1,5))    #1.0981749595009709

  b: 随机整数

    random.randint(1,3)             [1,3] 包含3在内的范围内随机取整数

import random
print(random.randint(1,9))   #1-9之间随意取

    random.randrange(1,3)        [1,3)不包含3在内的范围内随机取整数

    random.randrange(1,20,2)   [1,20]20之内的范围内随机取奇数

import random
print(random.randrange(1,20,2))   #1-20之间随意奇数

  c: 随机抽取

    随机抽取一个值 : random.choice(lst)

import random
lst = [1,2,'aa',(1,3,'qq')]
print(random.choice(lst))

    随机抽取多个值 : random.sample(lst)

import random
lst = [1,2,'aa',(1,3,'qq')]
print(random.sample(lst,3))  #返回值是一个来列表

  d: 打乱顺序

    再原列表的基础上做乱序  random.shuffle(lst)

import random
lst = [1,2,'aa',(1,3,'qq')]
random.shuffle(lst)  #没有返回值
print(lst)

    e : 随机模块的应用:

    版本1: 纯数字的验证码:

def rand_code(n=4):
    code = ''
    for i in range(n):
        num = random.randint(0,9)
        code += str(num)
    return code

print(rand_code())
print(rand_code(6))

    版本2: 包含数字和字母的验证码:

def rand_code(n=6):
    code = ''
    for i in range(n):
        rand_num = str(random.randint(0,9))
        rand_alph = chr(random.randint(97,122))
        rand_alph_upper = chr(random.randint(65,90))
        atom_code = random.choice([rand_num,rand_alph,rand_alph_upper])
        code += atom_code
    return code

ret = rand_code()
print(ret)

        版本3 : 数字/数字和字母的验证码:

def rand_code(n=6 , alph_flag = True):
    code = ''
    for i in range(n):
        rand_num = str(random.randint(0,9))
        if alph_flag:
            rand_alph = chr(random.randint(97,122))
            rand_alph_upper = chr(random.randint(65,90))
            rand_num = random.choice([rand_num,rand_alph,rand_alph_upper])
        code += rand_num
    return code

ret = rand_code(n = 4)
print(ret)

6 collection模块

  1) Counter方法:  https://www.cnblogs.com/keke-xiaoxiami/p/8553076.html

    Counter目的是用来跟踪出现的次数. 它是一个无序的容器类型, 以字典的键值对形式存储,其中元素作为key,计数的值作为value. 计数值可以是任意的整数.

  创建counter类的四种方法:

    

c = Counter()  # 创建一个空的Counter类
c1 = Counter('gallahad')  # 从一个可iterable对象(list、tuple、dict、字符串等)创建
c2 = Counter({'a': 4, 'b': 2})  # 从一个字典对象创建
c3 = Counter(a=4, b=2)  # 从一组键值对创建
print(c,c1,c2,c3)
#Counter()
#Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1})
#Counter({'a': 4, 'b': 2})
# Counter({'a': 4, 'b': 2})

  

 

    

    

原文地址:https://www.cnblogs.com/gyh412724/p/9438555.html