首页 > 编程语言 >0基础学python-18:掌管匹配机制的模块——re

0基础学python-18:掌管匹配机制的模块——re

时间:2024-07-19 22:56:07浏览次数:10  
标签:匹配 python 18 re 字符串 print 正则表达式 match

目录

前言

使用正则表达式的背景:

 元字符

 匹配的范围

 正则表达式

1.import re

2.re.match(r"匹配的规则",所要匹配的字符串) 

3.匹配一个变量名

 4.转义字符的匹配

5.分组匹配

6.贪婪匹配

7.预编译


前言

        正则表达式(Regular Expression,简称 regex 或 regexp)是一种用来描述字符串匹配模式的强大工具。它提供了一种灵活的方式来搜索、匹配和替换文本中的字符串。正则表达式由普通字符(如字母、数字)和特殊字符(元字符)组成,这些特殊字符用来定义模式的规则。

 

使用正则表达式的背景:

strs = "jshdfkjshd\sdf/gasg.sd<<asd,1123-"

        之前学过的字符串处理方法里分割字符是使用split.()。按照括号里的字符分割字符串。但对于上述strs字符串,字符很多,或者字符串很长很杂。这时想要取出自己想要的内容,就要使用正则表达式来提取。

 

 元字符

        正则表达式用来匹配要取数据类型的字符

 

 匹配的范围

用*表示任意个字符(包括0个),
用+表示至少一个字符,
用?表示0个或1个字符,
用{n}表示n个字符,
用{n,m}表示n~m个字符

 

 正则表达式

1.import re

        导入re模块

 

2.re.match(r"匹配的规则",所要匹配的字符串) 

        使用re模块里的match方法进行匹配,其中r的使用是为了避免字符串里的转义字符影响匹配的规则,下面代码中的"-"是精准匹配字符串里的"-"。

# 正则表达式
import re

if __name__ == '__main__':

    phone_num = "0551-1234567899"

    print(re.match(r"\d{4}-\d{3,8}", phone_num))

 

3.匹配一个变量名

        [A-Za-z_]的含义是能够匹配大写字母A到Z,小写字母a到z和下划线_,"-"在正则表达式里表示从什么到什么。\w*的含义是匹配0至任意个字母数字或者下划线。

        [pP]的含义是,p或者P

#匹配一个变量名称
print(re.match(r"[A-Za-z_]\w*", ""))

print(re.match(r"[pP]ython","python"))

 

 4.转义字符的匹配

    print("ABC\\001")

    print(re.match(r"\w+\\\d+","ABC\\001"))

输出:\w+匹配前面的字母,\\精准匹配原字符串里的\\,\d+匹配后面的数字

ABC\001

 

5.分组匹配

        匹配时间:注意每个位数的大小范围

# 分组使用的是在正则内部使用 括号 第几个括号就是第几个组别
print(re.match(r"([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)", t).groups())
print(re.match(r"([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)", t).group(1))
print(re.match(r"([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)", t).group(2))
print(re.match(r"([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)", t).group(3))

输出:([0-1]\d|2[0-3])  这里的|也表示或者的意思 ,注意group()输出时从1开始,而不是列表和字符串里的从0开始

('19', '59', '59')
19
59
59

 

6.贪婪匹配

正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。

# 贪婪匹配
# 怎么结束贪婪匹配  ? 结束贪婪匹配
# ^表示以什么开头   $ 表示以什么结尾
num = "102333330002000"
num1 = "102333000000"
num2 = "1023333000000"
num3 = "103333000000"
num4 = "133333000000"
print(re.match(r"^(\d+?)(0+)$", num).groups())  # 以数字开头,贪婪匹配至以0结尾,且中间全是0的字段的开头结束,且匹配的字段也必须以0结尾,不然会报错

输出:^表示开头,$表示结尾。

('102333330002', '000')

 

7.预编译

类似于自定义函数

num1 = "1023330001000"
num2 = "10233330001000"
num3 = "1033330001000"
num4 = "1333330001000"

# 预编译
# 如果大家规则都类似  那可以提前将规则定义好
re_comp = re.compile(r"^(\d+?)(0+)$")
print(re_comp.match(num1).groups())
print(re_comp.match(num2).groups())
print(re_comp.match(num3).groups())
print(re_comp.match(num4).groups())

输出:

('1023330001', '000')
('10233330001', '000')
('1033330001', '000')
('1333330001', '000')

标签:匹配,python,18,re,字符串,print,正则表达式,match
From: https://blog.csdn.net/weixin_65047977/article/details/140559738

相关文章

  • MongoRepository 操作 AWS DocumentDB时,如何达到与MySql 中有 select … for update
    在MySQL中,SELECT...FORUPDATE用于在事务中对读取的数据行加锁,以防止其他事务同时修改这些行。这种行级锁定机制在关系型数据库中广泛使用,以确保数据一致性。在MongoDB或AWSDocumentDB中,类似的效果可以通过以下方式实现:使用FindandModify操作:MongoDB提供了f......
  • 攻防世界Web_python_template_injection(新手模式)
    二、Web_python_template_injection1.基本知识点模版引擎模版引擎可以让(网站)程序实现界面与数据分离,业务代码与逻辑代码的分离,这大大提升了开发效率,良好的设计也使得代码重用变得更加容易,但是模板引擎也拓宽了我们的攻击面,注入到模板中的代码可能会引发RCE或者XSS。在Jinja2......
  • 零基础入门:创建一个简单的Python爬虫管理系统
    摘要:本文将手把手教你,从零开始构建一个简易的Python爬虫管理系统,无需编程基础,轻松掌握数据抓取技巧。通过实战演练,你将学会设置项目、编写基本爬虫代码、管理爬取任务与数据,为个人研究或企业需求奠定坚实基础。一、前言:数据之海,从何舀水?在这个信息爆炸的时代,数据如同海洋,而......
  • 用lxml中的etree对猪八戒服务名称价格获取
    #本文仅供学习之用由于获取的响应内容不是JSON数据也不是静态页面只能通过lxmlxpath完成注意格式importrequestscookies={'_uq':'41047ede63ba9fa098e72e449062fe93','uniqid':'d01o8vk4trqm6','_suq':'14ee7588-acad-4654-8b05-5b......
  • 又来了哦,Python函数 | |
    1.变量的作用域(global与nonlocal)Python中的变量作用域可以通过global和nonlocal关键字来管理。‌全局变量:‌在Python中,‌使用global关键字可以在函数内部访问和修改全局变量。‌当需要在函数内部对全局变量进行操作时,‌应使用global关键字声明该变量,‌这样函数内部的操作就......
  • 7.18 史也分好坏,R959 是好史。
    CFR959(Div.1+2)Solve:A~E(5/8)Rank:777Rating:\(2117-1=2116\)发挥评价:Bad唉,天天喂这种比赛。然后我自己在简单题上唐完了,被卡住了,而且还被cf的波特验证控住了。以后少慌,加快速度,提前截好图。(其实最后已经会G了写完就上大分,但是来不及咯)争取下次上分吧。......
  • [FlareOn6]Overlong
    查壳,32位,无壳进IDA一个处理函数,还有一个弹窗,运行一下看看弹窗然后看看加密函数和加密的字符加密函数进去就是处理a3(28)次字符但是点进去402008这个数组发现他的实际长度很长,肯定是远远大于28结合一下returni,发现主函数就是把text[28]变成0,把字符串给截断了,让弹窗只输出......
  • python_day7
    数据类型​ 之前数字/字符串类型 之后字典\布尔类型列表类型使用列表的几个函数先建一个列表如name_list=['linda','david','louis','kevin','linda]取值时,直接print(name_list[0])或者选取其他的数字替换0,也可以倒数取-1,-2...,还能[0:2],[-3:]这样进行选取几个......
  • 基于Python+Django的智能水果销售系统设计与实现(源码+数据库+讲解)
    文章目录前言详细视频演示项目运行截图技术框架后端采用Django框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • (ECCV2024论文解读)GPSFormer: A Global Perception and Local Structure Fitting-based
    目录摘要1、引言2、方法2.1 背景3.2 全局感知模块2.3 局部结构拟合卷积泰勒级数局部结构拟合卷积显式结构引入2.4 GPSFormer点云分类部件分割任务3、实验3.13D形状分类ScanObjectNN数据集上的形状分类ModelNet40数据集上的形状分类3.2部件分割3.3小样本分类3.4消融研究全局感......