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. samba配置用户访问方法

    配置目的: 为了给指定用户一个独立访问目录 首先在samba服务器安装samba软件 $ apt-get install samba 然后配置独立访问用户 配置samba用户前提需要是linux的用户 ...

  2. centos 7.6 虚拟机开启网卡

    1.    2. > cd /etc/sysconfig/network-scripts 3. > vi ifcfg-enp0s3 上图标红区域,默认值是:no,改为yes:保存. 4. ...

  3. Python_编码错误解决办法 python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX

    先说解决办法:头部加几行代码 import io import sys sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb1803 ...

  4. H265Nalu头部解析

    一 NALU头部解析 F: 必须为0,为1表示语法错误.整包将被丢弃 NalType:nalu包的类型,其中VCL NAL和non-VCL NAL各有32类.0-31是vcl nal单元:32-63, ...

  5. 好学易懂 从零开始的插头DP(一)

    好学易懂 从零开始的插头DP(一) 写在前面 这是一篇,以蒟蒻视角展开的梳理总结.更改了一些顺序,变化了一些细节.方便蒟蒻学习理解(起码本蒟蒻是这样).大佬们可以直接看其它大佬的博客,可以学的更快. ...

  6. 5G时代,URL Rewrite 还吃香吗

    URL Rewrite是网站建设中经常用到的一项技巧,通过 rewrite 我们能够屏蔽服务器运行态的信息,包括服务的程序.参数等等,给用户呈现美化后的URL,同时对搜索引擎更加友好,方便我们网站的推 ...

  7. 一遍记住Java常用的八种排序算法

    1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数--直 ...

  8. web安全入门--入门条件

    介绍:网络安全由习大大提出,是继海.陆.空.外太空的第五大作战领域,也是一个关系国家安全和主权.社会稳定.民族文化继承和发扬的重要问题.其重要性,正随着全球信息化步伐的加快越来越重要.接下来,我向大家 ...

  9. Ubuntu16.04安装搜狗输入法报错:dkpg:处理归档sogoupinyin.deb(--install)时出错,安装sogoupinyin将破坏fcitx-ui-qimpanel

    系统:ubuntu16.04 事件:安装搜狗拼音时报错 报错信息(ubuntu语言是英文的报错信息): dpkg: regarding sogoupinyin_2.3.2.07_amd64-831.d ...

  10. D. Numbers on Tree(构造)【CF 1287】

    传送门 思路: 我们需要抓住唯一的重要信息点"ci",我的做法也是在猜想和尝试中得出的,之后再验证算法的正确性. 我们在构造中发现,如果树上出现了相同的数字,则会让树的构造变得不清 ...