广告位联系
返回顶部
分享到

正则表达式+Python re模块的介绍

正则表达式 来源:互联网搜集 作者:秩名 发布时间:2020-03-27 20:33:57 人浏览
摘要

正则表达式(Regluar Expressions)又称规则表达式,在代码中常简写为REs,regexes或regexp(regex patterns)。它本质上是一个小巧的、高度专用的编程语言。 通过正则表达式可以对指定的文本实现 匹配测试、内容查找、内容替换、字符串分割 等功能。 re模块

正则表达式(Regluar Expressions)又称规则表达式,在代码中常简写为REs,regexes或regexp(regex patterns)。它本质上是一个小巧的、高度专用的编程语言。 通过正则表达式可以对指定的文本实现
匹配测试、内容查找、内容替换、字符串分割 等功能。

re模块介绍

Python中的re模块提供了一个正则表达式引擎接口,它允许我们将正则表达式编译成模式对象,然后通过这些模式对象执行模式匹配搜索和字符串分割、子串替换等操作。re模块为这些操作分别提供了模块级别的函数以及相关类的封装。

正则表达式一些小规则

    ①元字符

  ②量词

③贪婪和非贪婪匹配

    总是在量词范围内尽量多匹配 - 贪婪
    总是在量词范围内尽量少匹配 - 惰性
    .*?x 匹配任意内容任意次数 遇到x就停止
    .+?x 匹配任意内容至少1次 遇到x就停止

    ④转义符问题

    . 有特殊的意义,取消特殊的意义\
    取消一个元字符的特殊意义有两种方法
    在这个元字符前面加 \
     对一部分字符生效,把这个元字符放在字符组里
    [.()+?*]

Python --> re模块

findall
        会优先显示分组内的内容
        *****取消优先显示(?:正则)
search
        只能返回第一个符合条件的项
        得到的结果需要.group取值
        默认获取完整的匹配结果
        通过group(n)取第n个分组中的内容

# search 还是按照完整的正则进行匹配,显示也显示匹配到的第一个内容,但是我们可以通过给group方法传参数
# 来获取具体文组中的内容
ret = re.search('9(\d)(\d)','19740ash93010uru')
print(ret) # 变量 -- > <re.Match object; span=(1, 4), match='974'>
if ret:
  print(ret.group()) # --> 974
  print(ret.group(1)) # --> 7
  print(ret.group(2)) # --> 4

# findall
  # 取所有符合条件的,优先显示分组中的
# search 只取第一个符合条件的,没有优先显示这件事儿
  # 得到的结果是一个变量
    # 变量.group() 的结果 完全和 变量.group(0)的结果一致
    # 变量.group(n) 的形式来指定获取第n个分组中匹配到的内容

# 加上括号 是为了对真正需要的内容进行提取
ret = re.findall('<\w+>(\w+)</\w+>','<h1>askh930s02391j192agsj</h1>')
print(ret) # --> ['askh930s02391j192agsj']
 

    其他的内容在代码中有详细的注释,大家可以复制我的代码一步一步运行然后实验

    以下的内容有:split sub subn math,compile,finditer

# split sub subn math,compile,finditer
# split
res = re.split('\d+', "cyx123456cyxx")
print(res) # --> ['cyx', 'cyxx']
res = re.split('(\d+)', "cyx123456cyxx") # 保留分组
print(res) # --> ['cyx', '123456', 'cyxx']
# sub 替换
res = re.sub('\d+', '我把数字替换了',
       "cyx123456cyxxx123456") # 默认全部替换,当然也可以替换一次re.sub('\d+','我把数字替换了',"cyx123456cyxxx123456",1)
print(res) # --> cyx我把数字替换了cyxxx我把数字替换了
# subn 替换了并显示替换的次数
res = re.subn('\d+', '我把数字替换了', "cyx123456cyxxx123456")
print(res) # --> ('cyx我把数字替换了cyxxx我把数字替换了', 2)
# match 这个就相当与加了个^ (和search差不多) --> 主要用来规定这个字符号必须是什么样的
res = re.match('\d+', 'cyx123456cyxxx')
print(res) # --> None
res = re.match('\d+', '123cyx456cyxxx')
print(res.group()) # --> 123
# compile -- 节省代码的时间的工具
# 假如同一个正则表达式要被使用多次
# 节省了多次解析同一个正则表达式的时间
ret = re.compile("\d+")
res = ret.search("cyx12456cyxXX123")
print(res.group()) # --> 12456
# finditer --> 节省空间
ret = re.finditer("\d+", "cyx123456cyxxx125644")
for r in ret:
  print(r.group()) # --> 123456
  # 125644
# 怎么又节省时间又节省空间呢?
ret = re.compile('\d+')
res = ret.finditer("cyx222231fddsf45746sdf2123sdf56456sdf10123sdf123132sdf")
for r in res:
  print(r.group())
"""
222231
45746
2123
56456
10123
123132
"""
# 分组命名(?P<组名>正则) (?P=组名)
# 有的时候我们要匹配的内容是包含在不想要的内容之中的,
# 只能先把不想要的内容匹配出来,然后再想办法从结果中去掉
# 分组命名的用法 (找两个组里面是一样的内容)
exp = '<abc>asdasf54545645698asdasd</abc>00545sdfsdf</abd>'
ret = re.search('<(?P<tag>\w+)>.*?</(?P=tag)', exp)
print(ret) # -- > <re.Match object; span=(0, 33), match='<abc>asdasf54545645698asdasd</abc'>
# exp2:
import re
ret = re.search('\d(\d)\d(\w+?)(\d)(\w)\d(\d)\d(?P<name1>\w+?)(\d)(\w)\d(\d)\d(?P<name2>\w+?)(\d)(\w)',
        '123abc45678agsf_123abc45678agsf123abc45678agsf')
print(ret.group('name1')) # -- > agsf_123abc
print(ret.group('name2')) # -- > agsf
 

今日小思考

    当我们有一个这样的列表:

lis = ['', 'z', 'c', 'asd', 'sdf', '', 'asd']

    那么我们如何将里面的空字符删除呢?

 
ret = filter(lambda n: n, lis)
print(list(ret)) # --> ['z', 'c', 'asd', 'sdf', 'asd']


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/caiyongxin_001/article/details/105022789
相关文章
  • 正则表达式校验日期时间格式的方法
    日期部分校验 概念 首先,我们先了解2个概念: 1、合法的日期范围: DateTime值类型表示值范围在公元(基督纪元)0001 年 1 月 1 日午夜 12
  • 如何使用正则表达式对输入数字进行匹配

    如何使用正则表达式对输入数字进行匹配
    最近有一个区间范围限制,一般255数字以下的都能在网上薅到,但是需要弄一个int16、int32、int64范围的输入限制......在网上逛了很久都没找
  • 最实用的正则表达式的整理

    最实用的正则表达式的整理
    想要白嫖正则是吧?本篇就一次给你个够!先冲 100 个!(如果还觉得不够就评论反馈后再加,本篇持续更新加码!!) 点赞再看,养成好
  • 停止编写API函数原因介绍
    RESTFUL API 通常提供在不同实体上执行增删改查(CRUD)操作的一组接口。我们通常在我们的前端项目中为这些每一个接口提供一个函数,这些
  • 正则表达式的基本语法汇总介绍

    正则表达式的基本语法汇总介绍
    1.正则表达式的基本语法 1.1两个特殊符号 ^ 和 $ ^ 正则表达式的起始符 ^tom 表示所有以tom开头的字符串 $ 正则表达式的结束符 lucy$ 表示所有
  • 正则表达式基础语法以及应用介绍

    正则表达式基础语法以及应用介绍
    一、正则表达式 1、基本介绍 ? 概述 一个正则表达式,就是用某种模式去匹配字符串的一个公式。很多人因为它们看上去比较古怪而且复杂
  • 正则表达式从HTML中匹配img标签的图片地址

    正则表达式从HTML中匹配img标签的图片地址
    前言 有玩过爬虫的人应该都有过在又臭又长的HTML中找寻信息的经历,虽然有各种工具和各种框架可以辅助查找,但是解析HTML的规则也是人
  • Snort中pcre和正则表达式的使用介绍

    Snort中pcre和正则表达式的使用介绍
    1. 题目描述 If snort see two packets in a TCP flow with first packet has login or Initial in payload, destination port is 3399;and second packet has a IPv4Address:Portstring(E.g
  • 在nest.js中通过正则表达式正确设置验证的方法

    在nest.js中通过正则表达式正确设置验证的方法
    下面看下nest.js正则表达式设置验证的方法,代码如下所示: 1 2 3 4 import { IsNotEmpty, Length, Matches, Max, Min } from class-validator; const phoneReg = /^1(3
  • shell脚本中的正则表达式介绍
    正则表达式的概念及特点: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计