python学习——re模块

摘要:
这是正则匹配打印(ret.group())的结果。#通过ret group()获得真正的记过记录匹配**,这相当于添加到搜索的正则表达式摘要中的^。它只能匹配ret=re。match('d+$','128fdasfd')print(ret)从开头拆分**以返回列表。

re模块

  • findall***** 返回列表,找所有的匹配结果
    • 语法:findall('正则表达式','待匹配字符串',flag)
  • search***** 返回一个内存地址,这是一个正则匹配的结果span是索引,match是匹配结果,通过group取值;没有对应匹配结果就返回None,group会报错
    • 语法:search(‘正则表达式’,‘待匹配字符串’)
    • ret = re.search('d+','fdaf1123afda23')
    • if ret: # 内存地址,这是一个正则匹配的结果
      • print(ret.group())# 通过ret.group()获得真正的记过
  • match** 相当于search的正则表达式汇总加了一个^,只能从头开始匹配
    • ret = re.match('d+$','128fdasfd')
    • print(ret)
  • split** 返回列表,按照正则规则切割,默认去、匹配到的内容会被切掉
    • ret = re.split('d+',s)
    • print(ret)
  • sub/subn** 替换,按照正则规则去寻找要被替掉的内容,subn返回元组,第二个值是替换的次数
  • compile***** 编一个正则表达式,用这个结果去search、match、findall、finditer,能够节省时间
    • ret = re.compile('正则') # 已经完成编译
    • ret.findall('待匹配字符串')
  • finditer***** 返回一个迭代器,所有的结果都在这个迭代器中,需要通过循环+group的形式取值,能够节省内存

    ret = re.finditer('正则',’带匹配str‘)

    for i in ret:

      print(i.group())

findall:匹配所有每一项都是列表中的一个元素

1 import re
2 ret = re.findall('d+','qgadgeafd798a') #正则表达式,带匹配的字符串,flag
3 ret1 = re.findall('d','qgadgeafd798a')
4 print(ret)
5 print(ret1)

search:只匹配从左到右的第一个,得到的不是直接的结果,而是一个变量,通过这个变量的group方法获取结果,如果没有匹配到会返回None,使用group会报错

import re
ret = re.search('d+','qgadgeafd798a') if ret: print(ret) #返回内存地址,这是一个正则匹配的结果 print(ret.group()) #通过ret。group()获取真正的结果



math 从头开始匹配,相当于search中的正则表达式加上^

ret = re.match('d+','qgadgeafd798a')
print(ret)


字符串处理的扩展:替换 切割
split 按照正则表达式的内容切割

s = 'alex83taibai40egon25'
ret = re.split('d+',s)
print(ret)


sub 替换 谁 旧的 新的 替换次数

ret = re.sub('d+','H','alex83taibai40egon25')
print(ret)


 subn 返回一个元组第二个元素是替换次数

ret = re.subn('d+','H','alex83taibai40egon25')
print(ret)

re模块的进阶
  compile 节省你是用正则表达式解决问题的时间,编译 将正则表达式编译成字节码,在多次使用过程中,不会多次编译

ret = re.compile('d+')
print(ret)
res = ret.findall('alex83taibai40egon25')
print(res)
ress = ret.search('alex83taibai40egon25')
print(ress.group())

  finditer 节省你是用正则表达式解决问题的空间

ret = re.finditer('d+','alex83taibai40egon25')
print(ret)
for i in ret:
print(i.group())
import re
s = '<a>wahaha</a>' #   标签语言html
ret = re.search('<(w+)>(w+)</(w+)>',s)
print(ret.group())#所有结果
print(ret.group(0))#所有结果
print(ret.group(1))#数字参数代表的是去对应分组中的内容
print(ret.group(2))
print(ret.group(3))

为了findall也可以顺利娶到分组中的内容,有一个特殊语法,就是优先显示分组中的内容
ret = re.findall('w+',s)
print(ret)
ret = re.findall('>(w+)<',s)
print(ret)

取消分组优先(?:正则表达式)
ret = re.findall('d+(.d+)?','1.234*')
print(ret)

关于分组
对于正则表达式来说,有些时候我们需要进行分组,来整体约束某一组字符出现的次数  
(.[w]+)?

对于python语言来说,分组可以帮助你更好更精准的找到你真正需要的内容
<(w+)>w(w+)</(w+)>

split 添加分组()保留被切掉的正则表达式
ret = re.split('d+','alex83taibai40egon25')
print(ret)
ret = re.split('(d+)','alex83taibai40egon25')
print(ret)


python和正则表达式之间的特殊约定

分组命名 (?P<这个组的名字>这则表达式)
s = '<a>wahaha</a>'
ret = re.search('>(?P<con>w+)<',s)
print(ret.group(1))
print(ret.group('con'))

s = '<a>wahaha</b>'
pattern = '<(?P<tab>w+)>(w+)</(?P=tab)>'
ret = re.search(pattern,s)
print(ret)
你要匹配的内容太美有特点了,容易和你不想匹配的内容混在一起,精准的取到整数,过滤掉小数

import re
ret=re.findall(r"d+","1-2*(60+(-40.35/5)-(-4*3))")
print(ret) #['1', '2', '60', '40', '35', '5', '4', '3']
ret=re.findall(r"-?d+.d*|(-?d+)","1-2*(60+(-40.35/5)-(-4*3))")
print(ret) #['1', '-2', '60', '', '5', '-4', '3']
ret.remove("")
print(ret) #['1', '-2', '60', '5', '-4', '3']

正则表达式如果写的足够好,能够最大限度的简化我们的操作

正则表达式到底重要到什么程度
掌握作业中的所有内容
能够看懂常用的正则表达式
并且能够做出一些公司特异性要求的修改

简单了解爬虫实例
import re
import json
from urllib.request import urlopen

def getPage(url):
    response = urlopen(url)
    return response.read().decode('utf-8')

def parsePage(s):
    com = re.compile(
        '<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>d+).*?<span class="title">(?P<title>.*?)</span>'
        '.*?<span   .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>', re.S)

    ret = com.finditer(s)
    for i in ret:
        yield {
            "id": i.group("id"),
            "title": i.group("title"),
            "rating_num": i.group("rating_num"),
            "comment_num": i.group("comment_num"),
        }

def main(num):
    url = 'https://movie.douban.com/top250?start=%s&filter=' % num
    response_html = getPage(url)
    ret = parsePage(response_html)
    print(ret)
    f = open("move_info7", "a", encoding="utf8")

    for obj in ret:
        print(obj)
        data = str(obj)
        f.write(data + "
")

count = 0
for i in range(10):
    main(count)
    count += 25

免责声明:文章转载自《python学习——re模块》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Html辅助方法 之 Form表单标签weex 引导页(guide)页面下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

DGL学习(二): 使用DGL构造图

有许多方法可以构造DGLGraph。文档中建议使用的方法有四种,分别如下: ① 使用两个数组,分别存储源节点和目标节点对象 (数组类型可以是numpy 也可以是 tensor)。 ② scipy 中的稀疏矩阵(),表示要构造的图的邻接矩阵。 ③ networkx 的图对象(DGLGraph 和 networkx 可以互转)。 ④ 整数对形式的边列表。 下面...

Python基础之列表

列表初识 列表的作用和定义 列表是python中使用最频繁的数据类型,在其他语言中一般称为数组; 用一个变量存储多个数据; 列表存储多个数据时,在中括号之间用逗号分隔多个数据; 语法定义: 变量名 = [数据1, 数据2, 数据3,...] eg: name_list = ["zhangsan", "lisi", "wangwu"] 列表存储数据的方式和...

【转】ARM 指令集版本和ARM 版本

----转载自: http://www.cnblogs.com/loleng/archive/2011/06/14/2080447.html 常常能看到ARM7,ARM9,ARM11,以及armv6k等不同的表达。且在GCC编译中,常常要用到 -march, -mcpu等。他们分别表达什么涵义呢?Sam自己也不很清楚,只是大概有个模糊的概念。今天就仔细研究...

11-linux基础八-正则表达式

1. 正则表达式的概念及特点:   正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。规定一些特殊语法表示字符类、数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示一个模式,这就是正则表达式(Regular Expression)。...

使用Web存储API存取本地数据

使用Web存储API TODO:本文由 赤石俊哉 翻译整理,您可以将本文自由地用于学习交流。如需用于其他用途请征得作者的同意。 原文链接:Using the Web Storage API - Mozilla Developer Network (英文) Web存储API提供了浏览器可以在本地安全存储键值对的一个机能,它比cookies更为直观。这篇文...

mysql获取当月数据_MySQL中获取天、周、月等数据

MySQL中获取天、周、月等数据 1.今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 2.昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1 3.近7天 SELECT * FROM 表名 where...