1. 基本规则

# 元字符:
# . ^ $ * + ? { } [ ] | ( ) \ # 字符类型匹配:
# . 表示匹配任意一个字符(换行符除外)
# [asdf] 表示匹配中括号里面的任意一个字母一次
# [a-z] 表示匹配a-z中的任意一个字母 [0-9] 表示匹配0-9中的任意一个数字
# [^0-9] 中括号中有^符号,表示非,除---之外,这里表示除0-9之外的任意字符 # \d 匹配数字,即 [0-9]
# \D 匹配⾮数字,即不是数字 [^0-9]
# \s 匹配空⽩,即 空格,tab键 [\t\n\r\f\v]
# \S 匹配⾮空⽩ [^\t\n\r\f\v]
# \w 匹配单词字符,即a-z、A-Z、0-9、_ [a-zA-Z0-9_]
# \W 匹配⾮单词字符 [^[a-zA-Z0-9_]]
# \b 匹配一个特殊字符边界,比如 空格、&、# 等 # 定位:
# ^ 表示起始定位
# $ 表示结束定位 # 匹配次数:
# * 表示任意次
# + 至少1次 [1,+oo]
# ? 匹配0次或者1次
# {a,b} 匹配指定的次数范围,如 {0,}相当于匹配任意次 ,{6} 表示匹配6次 # 分组 & 后向引用 & 别名:
# (ab) 将括号中字符作为⼀个分组
# \num 引⽤分组num匹配到的字符串
# (?P<name>) 分组起别名
# (?P=name) 引⽤别名为name分组匹配到的字符 # | 匹配左右任意⼀个表达式

2. findall

2.1 贪婪匹配&惰性匹配

1)贪婪模式

  • findall默认就是贪婪模式,其会尽可能多的匹配
  • findall会将所有匹配符合的内容保存到一个列表中
import re   # 导入re模块

# findall方法第一个参数是匹配的规则,第二个参数是要匹配的字符串
# findall会将所有匹配符合的内容保存到一个列表中
print(re.findall("hgzero", "thisishgzero"))
  # 输出:[hgzero]

data1 = re.findall("hg", "hgzerohgwzh")
print(data1)
  # 输出:['hg', 'hg']

2)惰性模式

  • 惰性模式就是尽可能少的去匹配
data1 = re.findall("hg*", "hggggg")  # 贪婪模式
data2 = re.findall("hg*?", "hggggg") # 惰性模式,后面的那个问号就表示惰性模式
print(data1) # 输出:['hggggg']
print(data2) # 输出:['h']

2.2 字符串转义流程

字符串转义的流程:字符串 --> python解释器转义 --> re模块的转义

# 转义
ret1 = re.findall("www.baidu", "www.baidu") # 这里面的 . 会代指任意字符(除\n外)
ret1 = re.findall("www\.baidu", "www.baidu") # 这里面,反斜杠的添加会让 . 符号失去元字符代指的意义,从而使其就表示普通的点 . 符号 # 字符串转义的流程: 字符串---> python解释器转义---> re模块的转义
ret2 = re.findall(r"I\b", "I hIo Ion") # 这里面的r ,表示在python层次不使用转义字符,直接将其传递给re模块
ret3 = re.findall("I\\\\b", "I hIo Ion") # 这里适用4个\ , 表示在python解释器层次转义成2个\ , 然后再将其传入re模块进行转义 re.findall("I\\b", "I what") # 这样使\\b在python层次被转义成\b传递给re模块
re.findall(r"I\b", "I what") # 这样在前面加上r ,可以让python不转义字符串内容,而直接传递给re

3. search

search会将匹配到的结果保存到一个对象中,且只匹配第一个对象。

用search取到的对象必须要用group取值。

# search会将匹配到的结果保存到一个对象中,且只匹配第一个对象
sear = re.search("\d+", "fasdfsaf345kdf89") # search返回的只是一个对象,且只返回找到的第一个
retu = sear.group() # 用search取到的对象必须要用group取值 # 可以用?P<name>的形式给某一部分命名别名
re.search("(?P<name>[a-z]+)(?P<age>\d+)", "hgzero21wzh23hg26").group("name")
re.search("(?P<name>[a-z]+)(?P<age>\d+)", "hgzero21wzh23hg26").group("age")

4. match

match只从开始开始匹配,且只匹配一次,返回一个对象,若没匹配到则什么都不返回

# match只从开始开始匹配,且只匹配一次,返回一个对象,若没匹配到则什么都不返回
re.match("\d+", "234fda")

5. split

split会将字符串按照某字符分割,然后保存为一个列表

# split会将字符串按照某字符分割
re.split(" ", "hello abc what") # 将字符串按照空格分割,保存到一个列表中
re.split("[ |]", "hello welcome|hi hgzero") # 将字符串按照空格或者|进行分割后保存到一个列表中 re.split("[ab]", "abc") # 先按照a分割,左边形成一个空,然后将得到的bc再按照b分割,左边又得到一个空
# 打印结果为 ['', '', 'c']

6. sub

sub可以完成字符串的替换功能

# sub可以完成字符串的替换功能
re.sub("\d+", "A", "welcome666hgzero987") # 将第三个参数中的字符串中的数字转换成A
# 这里面的第四个参数可以限定匹配替换的次数 re.subn("\d", "A", "welcome666hgzero987")
# 将匹配到的内容放在一个元组里,结果中的第二个值为匹配替换的次数
# 打印结果为 ('welcomeAAAhgzeroAAA', 6)

7. compile

compile可以事先定义好规则,保存为一个对象,然后后面可以直接使用这个对象而无需再定义规则

# compile可以事先定义好规则,保存一个对象,然后后面可以直接使用这个对象而无需再定义规则
com = re.compile("\d+")
com.findall("welcome666hgzero987")

8. finditer

finditer可以将得到的数据保存到一个迭代器中

# finditer可以将得到的数据保存到一个迭代器中
ret = re.finditer("\d", "welcome666hgzero987")
next(ret).group() # 可以通过next函数加上group调用迭代器中的内容 re.findall("www\.(baidu|163)\.com", "www.baidu.com") # findall会优先将分组中的内容返回
# 这里的返回结果为 ['baidu']
re.findall("www\.(?:baidu|163)\.com", "www.baidu.com") # 【在分组中加上 ?: 可以去掉分组的优先级】

Python之re正则的更多相关文章

  1. python浅谈正则的常用方法

    python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去 ...

  2. python匹配ip正则

    python匹配ip正则 #!/usr/bin/env python # -*- coding:utf-8 -*- import re ip_str = "asdad1.1.1.1sdfwe ...

  3. 【归纳】正则表达式及Python中的正则库

    正则表达式 正则表达式30分钟入门教程 runoob正则式教程 正则表达式练习题集(附答案) 元字符\b代表单词的分界处,在英文中指空格,标点符号或换行 例子:\bhi\b可以用来匹配hi这个单词,且 ...

  4. python 爬虫之 正则的一些小例子

    什么是正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是 事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符”,这个“规则字符” 来表达对字符的一种过滤逻辑. 正则并不是pyth ...

  5. Python实例---利用正则实现计算器[FTL版]

    import re # 格式化 def format_str(str): str = str.replace('--', '+') str = str.replace('-+', '-') str = ...

  6. Python中的正则

    regex_lst = [ ('字符组',), ('非打印字符',), ('特殊字符',), ('定位符',), ('限定符',), ('re模块',), ('分组命名',), ('或匹配',), ( ...

  7. Python模块(三)(正则,re,模块与包)

    1. 正则表达式 匹配字符串 元字符 .   除了换行 \w  数字, 字母, 下划线 \d  数字 \s  空白符 \n 换行符 \t  制表符 \b  单词的边界 \W  \D \S 非xxx [ ...

  8. python基础知识---正则

    一.python正则简介 python的re模块,让python能够支持perl正则 perl正则的字符集("."  "[abc]"   "(abc) ...

  9. python的re正则表达

    正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),是计算机科学的一个概念.正则表 ...

  10. Python之re正则模块

    正则表达式可以帮助我们更好的描述复制的文本格式,可以更好地利用它们对文本数据进行检索.替换.提取和修改操作. http://www.cnblogs.com/huxi/archive/2010/07/0 ...

随机推荐

  1. netcore一键部署到linux服务器以服务方式后台运行

    @font-face { font-family: octicons-link; src: url("data:font/woff;charset=utf-8;base64,d09GRgAB ...

  2. 【性能测试】【locust】场景性能测试步骤

    场景设计 实现登陆基本功能,输出相应结果,脚本通 多用户实现随机登陆 添加初始化方法on_start: 每个用户只运行一次 添加检查点: catch_responses = True 脚本设计 # 导 ...

  3. WPF有关控件和模板样式设计的微软官方文档

    说明 如果你正在使用WPF开发应用程序,相信这篇博客会对你有用.希望你能认真的阅读 正文 此文主要以Button为例进行介绍此文档的组成部分. Button Parts Button控件没有任何命名的 ...

  4. python3时间函数

    上一篇是生成测试报告的代码,如果重复运行测试报告名称相同会不停的覆盖,之前的测试报告也会丢失,无法追溯之前的问题.那么如何解决这个问题了呢? 首先想到的是用随机函数取随机名称,一旦生成的报告较多时,无 ...

  5. 完全图的最短Hamilton路径——状压dp

    题意:给出一张含有n(n<20)个点的完全图,求从0号节点到第n-1号节点的最短Hamilton路径.Hamilton路径是指不重不漏地经过每一个点的路径. 算法进阶上的一道状压例题,复杂度为O ...

  6. 使用OwnCloud建立属于自己私有的云存储网盘

    1.需要LAMP架构 实验环境:centos7.4 64位系统[root@xuegod63 ~]# yum install -y httpd php php-mysql mariadb-server ...

  7. Docker容器版Jumpserver堡垒机搭建部署方法附Redis

    1.简介 Jumpserver是全球首款完全开源的堡垒机,多云环境下更好用的堡垒机,使用GNU GPL v2.0开源协议,是符合 4A 的专业运维安全审计系统,使用Python / Django 进行 ...

  8. 「考试」noip模拟9,11,13

    9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...

  9. JZOJ8月15日提高组反思——2020年暑假终结篇

    JZOJ8月15日提高组反思--2020年暑假终结篇 T1 仙人掌最短路 抱歉我只会最短路 仙人掌是啥? 听说是缩点+\(LCA\) 最短路30 T2 直接暴力计算 正解\(DP\) \(amazin ...

  10. Docker 跨平台在 netCore 中的从入门到部署

    前言 从题目我们可以看的出,今天是五部曲的第三部,你可能会好奇,为啥没有见到前两部呢?这里我简单说下: 1.跨平台第一部曲:MySql 如果你看我的所有开源项目,应该能发现我已经全部迁移到了Mysql ...