zoukankan      html  css  js  c++  java
  • re模块

    re模块

    import re

    根据正则规则从一段内容中查找结果

    findall

    从字符串中选出所有能匹配正则表达式规则的内容,以列表的形式返回

    ret = re.findall('d+','alex123yuan234')

    print(ret)

    search

    在字符串内查找匹配,只找到第一个匹配并返回信息,返回的是一个结果集,要通过group取值,如果没有匹配到内容,则返回None,group取值会报错,所以一般不直接打印ret

    ret = re.search('d+','alex123yuan234')

    if ret:

      print(ret.group())

    match

    作用和search一样,不过只在字符串开始处匹配。在search里的正则规则前加一个 ^  search的功能就和match一样了

    替换

    sub

    ret = re.sub('d+','sb','alex84wusir73') # 默认替换所有

    ret = re.sub('d+','sb','alex84wusir73',1) # 写了1表示替换一次

    print(ret)

    subn

    ret = re.subn('d+','sb','alex84wusir73')

    print(ret) # ('alexsbwusirsb', 2) 返回的是元组,表示替换了两次

    split

    ret = re.split('d+','alex84wusir73yuan')

    print(ret)          按照正则规则切割字符串

    参数说明

    参数 正则表达式 待匹配的字符串

    替换 正则 要换的结果 待匹配的字符串

    空间方面操作

    finditer

    ret = re.finditer('d+','alex84'*200)              返回一个迭代器,内容是结果集

    for i in ret:

      print(i.group())                            用group从结果集取值

    时间操作方面

    compile

    对于一个经常被重复使用的正则表达式

    我们可以先进行一次编译

    之后只要用到这个表达式就可以直接拿出来用

    这样节省了代码的'时间'

    par = re.compile('d+')

    ret = par.findall('alex84')

    print(ret)

    分组在正则表达式中发挥的作用

    findall和分组

    分组在findall当中默认会优先被显示出来

    ret = re.findall('>(w+)<',r'<title>qqxing< itle>')

    print(ret)

    如果不想优先,那么在分组中添加(?:正规规则) 表示取消这个规则的优先显示

    ret = re.findall('d+(?:.d+)?',r'1.23+2.34')

    print(ret)

    split和分组

    会保留被切掉的在分组中的内容

    search和分组

    ret = re.search(r'<(w+)>(w+)<\(w+)>',r'<title>qqxing< itle>')

    print(ret.group(0)) # 不受到分组的影响

    print(ret.group(1))

    print(ret.group(2))        可以通过索引取值

    在爬虫数据清洗的过程中最常用的正则表达式的操作

    并不是把我要的内容的正则写出来

    而是把整个页面都用正则描述下来,然后把需要的内容放在分组里

    这样就能够取到想要的内容了

    分组命名

    ret = re.search(r'<(?P<tab1>w+)>(?P<content>w+)<\(w+)>',r'<title>qqxing<	itle>')
    print(ret.group(0))  # 不受到分组的影响
    print(ret.group('tab1'))  # 不受到分组的影响
    print(ret.group('content'))  # 不受到分组的影响

    (?P<名字>分组内容)    给分组命名

    print(ret.group('名字')    查看内容

    使用正则解决问题的两种方式

    当我们想匹配的内容混在不想匹配的内容中

    只能把不要的也匹配出来 然后去掉不想要的  剩下的就是我们需要的

    把整个结构描述下来 对想要的进行分组

    ret = re.findall('d+.d+|(d+)','1-2*(60+(-40.35/5)-(-4*3))')

    ret.remove('')

    print(ret)

  • 相关阅读:
    DB2去重的几种方法
    split命令:文件切割
    DB2中横表纵表互换
    做一个思想的码农
    access应用分享
    回顾2015年
    笑看互联网金融
    Razor语法
    数据库操作(二)
    SQL Server数据库简介(一)
  • 原文地址:https://www.cnblogs.com/biulo/p/10579866.html
Copyright © 2011-2022 走看看