学习python的第二十三天(re模块)

6.13自我总结

1.re模块

1.re.findall()

1.基本用法

re.findall(正则匹配的格式,匹配的对象)

2.正则匹配常用格式

1.^只匹配开头在多行模式中匹配每一行的开头

类似字符串内置方法里面的startswith

import re
s = '''aaaa,123213123,____,杨aaaaa'''
print(re.findall('^aaaa',s))
#['aaaa']

2.a|b匹配的格式a或者b

import re
s = '''aaaa,123213123,____,杨aaaaa'''
print(re.findall('123|aaaaa',s))
#['123', '123', 'aaaaa']

3.[a,b]匹配的格式a或者b如果ab为多个值他会把里面的东西打散

import re
s = '''aaaa,123213123,____,杨aaaaa'''
print(re.findall('[123,aaaaa]',s))
#['a', 'a', 'a', 'a', ',', '1', '2', '3', '2', '1', '3', '1', '2', '3', ',', ',', 'a', 'a', 'a', 'a', 'a']

4.a$匹配已a 结尾的

类似字符串内置方法里面的endswith

import re
s = '''aaaa,123213123,____,杨aaaaa'''
print(re.findall('杨$',s))
#[]
print(re.findall('杨aaaaa$',s))

5..代表任意字符

import re
s = '''aaaa,123213123,____,杨aaaaa'''
print(re.findall('杨...',s))
#   ['杨aaa']

6.{n}代表大括号前字符n个

import re
s = '''aaaa,123213123,____,杨aaaaa'''
print(re.findall('a{5}',s)) #等效于'aaaaa'
#['aaaaa']

7.*代表前面字符0-无穷大个

import re
s = '''aaaa,123213123,____,杨aaaaa'''
print(re.findall('a*',s))  #取到一个a后他不会停止会接着往后找,a为0个他也取
['aaaa', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'aaaaa', '']

8.+代表前面字符1-无穷大个

import re
s = '''aaaa,123213123,____,杨aaaaa'''
print(re.findall('a+',s))  #取到一个a后他不会停止会接着往后找
['aaaa', 'aaaaa']

9.a?代表a字符0-1个

import re
s = '''aaaa,123213123,____,杨aaaaa'''
print(re.findall('aaa',s))
print(re.findall('aaa?',s))
['aaa', 'aaa']
['aaa', 'aaa', 'aa']

10.\模式

一个\接某个类型代表一个字符

  • \d匹配数组
  • \D除了数字都匹配到了
  • \s,空
  • \S,非空
  • \w,字母,数字,下划线
  • \W,非字母,数字,下划线

11.?a,前面值是+或者*的时候?匹配内容a结束

import re
s = '''aaaa,123213123,____,杨aaaaa'''
print(re.findall('aa+?a',s))
['aaa', 'aaa']

12.(),括号里面什么到时候取什么

3.re.findall(正则匹配的格式,匹配的对象,re.S)

re.S的作用:

不使用re.S时,则只在每一行内进行匹配,如果存在一行没有,就换下一行重新开始,使用re.S参数以后,正则表达式会将这个字符串看做整体,在整体中进行匹配

import re
a = """sdhellolsdlfsdfiooe:
yy988989pythonafsf"""
b = re.findall('hello(.*?)python',a)
c = re.findall('hello(.*?)python',a,re.S)
print (b)
print(c)
输出结果:
b:[]
c:['lsdlfsdfiooe:\nyy988989']

2.re.match和re.search

# match 和 search的区别,mathch从开头开始匹配找一个,search搜索所有找第一个

3.re.compile

定义某种搜索格式
res1 = re.compile('\d+')
res1.findall(查找对象)等同于re.findall('\d+',查找对象)

4.re.split()

就是字符串的split方法,区别是可以使用正则表达式去替换

5.re.sub和re.subu

就是字符串的replace方法,区别是可以使用正则表达式去替换

import re

s = '猪八戒的媳妇是1高翠兰,孙悟空的媳妇是2白骨精,唐僧的媳妇是3女儿国王,沙悟净6没有媳妇(py9的学生们)'

print(re.sub('\d','',s))

print(re.subn('\d','',s))  # 除了会修改内容,还会返回修改了多少次
猪八戒的媳妇是高翠兰,孙悟空的媳妇是白骨精,唐僧的媳妇是女儿国王,沙悟净没有媳妇(py的学生们)
('猪八戒的媳妇是高翠兰,孙悟空的媳妇是白骨精,唐僧的媳妇是女儿国王,沙悟净没有媳妇(py的学生们)', 5)

原文地址:https://www.cnblogs.com/pythonywy/p/11018912.html

时间: 2024-10-09 22:47:31

学习python的第二十三天(re模块)的相关文章

学习python课程第二十三天

一.    组合 : 1. 什么是组合 ? 一个对象的属性是来自于另外一个类的对象, 称之为组合. (跟继承其实很相似.都是共用一个类里面的属性) 2. 为何用组合 ? 组合也是用来解决类与类代码冗余的问题. 3. 如何用组合 ? class Foo: aaa=1111 def __init__(self,x,y): self.x=x self.y=y def func1(self): print('Foo内的功能') class Bar: bbb=2222 def __init__(self,

学习Python必须要知道的常用模块

在程序设计中,为完成某一功能所需的一段程序或子程序:或指能由编译程序.装配程序等处理的独立程序单位:或指大型软件系统的一部分.本文为你介绍了Python中的两种常用模块. os: 这个模块包含普遍的操作系统功能.利用这个模块可以写出与平台无关的程序,比如就是使用os.sep可以取代操作系统特定的路径分割符. 列举一些os模块中常用的方法: os.name:获取当前系统平台,Windows下返回'nt',Linux下返回'posix'. os.linesep:获取当前平台使用的行终止符.Windo

Node学习之(第二章:http模块)

前言 继续上一节的探讨,今天我们来聊聊Node中怎么搭建一个简单的web服务器.平时大家在撸码的过程中,经常需要向服务器发送请求,然后服务器接受请求,响应数据.今天我们就来自己手写一个简单服务器,根据前端请求,我们来响应相关数据. 开始 开启一个本地服务器需要Node.js中http核心模块,至于核心模块是什么,我会在接下来的章节中和大家解释,也欢迎大家持续关注我的前端Node.js的学习之旅. http--模块提供了搭建本地服务器的API,首先我们在项目中引入: let http = requ

Python基础第十三天——sys模块、logging模块、json模块、pickle模块

一.sys模块 1.定义: 与python解释器交互的一个模块 2.sys模块常用的方法 (1)sys.argv方法 定义:命令行参数list,第一个元素是程序本身路径 例: import sys print(sys.argv) # sys.argv只是反映当前模块名,用一个列表存着 # 而pycharm软件则给我们自动加上了绝对路径 输出结果:          # 这个结果并不正确,是因为这是pycharm给加上去的 ['C:/Users/William/PycharmProjects/Py

Python 基础第二十三天(反射)

今日主要内容 1.面向对象高级特性---反射 2.内置函数和内置方法补充 1.什么是反射: 通过内置函数getattr(),hasattr(),setattr(),delattr()实现,在类外通过对字符串的操作,能够将类内同名的静态变量,方法,如对象属性是无法取到值的. 也可以理解为: ***正常情况下如果可以拿到这个变量 那么如有有这个变量的字符串形式 就是用反射可以获取到这个值 使用字符串数据类型的变量名 访问一个命名空间中的名字 找一个属性 ,直接就可以找到这个属性的值 找一个方法 ,找

第二十三篇 logging模块(******)

日志非常重要,而且非常常用,可以通过logging模块实现. 热身运动 import logging logging.debug("debug message") logging.info("info message") logging.warning("warning message") logging.error("error message") logging.critical("critical messag

开始学习python的第二天

一.练习题 1.使用while循环输入 1 2 3 4 5 6 8 9 10 #第一种方法 count = 0 while count < 10: count += 1 # count = count + 1 if count == 7: print(' ') else: print(count) #第二种 count = 0 while count < 10: count += 1 # count = count + 1 if count == 7: continue print(count

【Objective-C学习记录】第二十三天

数组类: 有序集合 不可变 OC中的数组是一个容器,可以有序管理一系列元素,元素类型可以不相同,但是必须是对象类型. 初始化方法: 1.initWithObjects: 2.便利构造器 3.字面量. 1 NSArray *array = @[@"SF", @"QOP", @"ST", @"PANDA"]; 原始(核心)方法: 1.count.数组的元素个数 2.objectAtIndex.通过下标获取数组元素 常用方法: 1.

学习python课程第二十二天

一 .   类的继承与派生 : 1. 什么是继承: 在程序中继承是一种新建子类的方式, 新创建的类称之为子类,或者派生类. 被继承的类称之为父类, 继承描述的是一种遗传关系, 子类可以重用父类的属性. 2. 为何要用继承 : 继承可以减少类与类之间代码冗余的问题. 3. 如何继承 : 先抽象,再继承 抽象 :抽取出比较像的部分.. 最主要的作用是划分类别 (可以隔离关注点, 降低复杂度.) 继承 :是基于抽象的结果,通过编程语言去实现它. 肯定是先经历抽象这个过程,才能通过继承的方式去表示 出抽