转译符,re模块,random模块

2018-08-10 11:26:24来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

一, 转译符

  1.python 中的转译符

    正则表达式中的内容在Python中就是字符串

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

    ' \ \ n' :  \ \  表示取消了\的转译

    r  表示取消本字符串的所有转译

    在正则表达式中: '\\n'-->'\n',但是在pycharm中 \n为换行符,则需要转译 '\\n',与之匹配

      的应为 : '\\\\n'-->'\\n '

    在Python中 : r '\\n'-->r '\n'

   

   2. 正则表达式中的转义

    ' \( ' 表示匹配小括号 ; [() + * ? / $ .] 在字符组中一些特殊的字符会现原形.

    [ - ] 只写在字符组的首位的时候表示普通的 减号 / 负号写在其他位置表示范围

      如果就是想匹配减号 [1\-9]

 

二, re 模块

  操作匹配的字符串

  方法: findall  search  math  替换  sub subn  切割  compile  finditer

 1. 查找 

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

ret = re.findall('\d+','123qwer123df')
print(ret)  #参数  返回值类型:列表  返回值个数:1  返回值内容:所有匹配的项若没有
          匹配到就是空列表 []

  

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

ret = re.search('\d+','123qwer123df')
print(ret)    #参数    返回值类型: 正则匹配结果的对象    返回值个数 : 1
                        如果匹配上就返回对象,没匹配上返回None
print(ret.group()) #返回的对象通过group来获取匹配到的第一个结果 

 

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

ret = re.match('\d+','%^123qwer123df')
print(ret)
#结果 : None    #只从头开始匹配,相当于在正则表达式前添加一个 ^

 

 2. 替换( replace)

  sub

ret = re.sub('\d+','H','123qwedf',1)  #把'\d+'替换成'H',指定替换一次(不指定次数全替换)
print(ret)

 

   subn

ret = re.subn('\d+','H','123qwedf',1)
print(ret)
#结果 ('Hqwerdf' , 1)    给出替换结果和替换的次数

 

 3. 切割 (split) 

ret = re.split('\d+','123qwerdf')
print(ret)    #按数字切割

 

 4. compile  (提高时间效率)

ret = re.compile('-0\.\d+|-[1-9]\d(\.\d+)?')   #可以重复被利用 ,在多
                            次使用某一个相同的正则表达式的时候,compile会提高
                            程序的效率.
                            
re = ret.search('qwe-20df-3')
print(re.group())  
#结果 -20          

 

  5. finditer  (提高空间效率)  

ret = re.finditer('\d','123qwerdf')    #拿到一个生成器
for i in ret     #拿到正则表达式对象
    print(i.group())

 

 6. 分组优先显示

  findall 

ret =  re.findall('www.(baidu|goole).com,'www.baidu.com')
print(ret)
#结果 [] findall 会优先显示分组中的 baidu|goole 匹配内容,要想取消分
    组优先,(?:正则表达式)

 

  split

ret = re.split('(\d+)','qwe12d34f')
print(ret)    #遇到分组会保留 被切掉的内容
#结果 ['qwe','12','d','34','f']

 

  search

re.search('\d+(.\d+)(.\d+)?','1.2.3-2*(60+(-40.35/5))')
print(ret.group())#全部输出/即是print(ret.group(0))
print(ret.group(1))# .2 优先输出(.\d+) print(ret.group(2))# .3 
  #如果search中有分组,通过group(n)就能够拿到group中的匹配的内容

 

 7. 分组命名  

   (?P<name>正则表达式)  表示给分组起名字 ;  (?P=name) 表示使用分组

  当匹配的内容和 另一部分必须一样是可以使用分组命名

  前后组名必须一样才能匹配成功

  必须先定义分组才能使用分组

   

      

 索引方法使用分组

  \1 表示使用第一组,匹配到的内容必须和第一个组中的内容完全相同

  

 

三, random模块

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

 1. 随机小数

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

  random.uniform(1,9)  任意范围内的小数

 

 2. 随机抽取

  num = [1,2,3,'qwe',('hehe','haha')]

  random.choice(num)  随机抽取列表中一个值

  random.sample(num,2) 随机抽取列表中2(多个值)值

 

 3. 随机整数

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

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

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

 

 4. 打乱顺序

  num = [1,2,3,'qwe',('hehe','haha')]

  random.shuffle(num)  在原列表基础上打乱顺序

  

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:【leetcode 简单】 第七题 合并两个有序链表

下一篇:【leetcode 简单】 第八题 删除排序数组中的重复项