python基础教程:re模块用法详解

这篇具有很好参考价值的文章主要介绍了python基础教程:re模块用法详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐

python基础教程:re模块用法详解,python基础,python,服务器,mysql,pycharm,正则表达式

一、正则表达式的特殊字符介绍

正则表达式

python基础教程:re模块用法详解,python基础,python,服务器,mysql,pycharm,正则表达式


👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~

素材、视频教程、完整代码、插件安装教程我都准备好了,直接在文末名片自取就可


二、re模块的方法介绍

1、匹配类方法

findall方法

findall方法,该方法在字符串中查找模式匹配,将所有的匹配字符串以列表的形式返回,

如果文本中没有任何字符串匹配模式,则返回一个空的列表,如果有一个子字符串匹配模式,则返回包含一个元素的列表,

所以,无论怎么匹配,我们都可以直接遍历findall返回的结果而不会出错,这对工程师编写程序来说,减少了异常情况的处理,代码逻辑更加简洁

# re.findall() 用来输出所有符合模式匹配的子串
 
re_str = "hello this is python 2.7.13 and python 3.4.5"
 
pattern = "python [0-9]\.[0-9]\.[0-9]"
res = re.findall(pattern=pattern,string=re_str)
print(res)
 
# ['python 2.7.1', 'python 3.4.5']
 
pattern = "python [0-9]\.[0-9]\.[0-9]{2,}"
res = re.findall(pattern=pattern,string=re_str)
print(res)
 
# ['python 2.7.13']
 
 
pattern = "python[0-9]\.[0-9]\.[0-9]{2,}"
res = re.findall(pattern=pattern,string=re_str)
print(res)
 
# []
 
# re.findall() 方法,返回一个列表,如果匹配到的话,列表中的元素为匹配到的子字符串,如果没有匹配到,则返回一个空的列表
 
re_str = "hello this is python 2.7.13 and Python 3.4.5"
 
pattern = "python [0-9]\.[0-9]\.[0-9]"
res = re.findall(pattern=pattern,string=re_str,flags=re.IGNORECASE)
print(res)
 
# ['python 2.7.1', 'Python 3.4.5']
 
# 设置标志flags=re.IGNORECASE,意思为忽略大小写

编译的方式使用正则表达式

我们一般采用编译的方式使用python的正则模块,如果在大量的数据量中,编译的方式使用正则性能会提高很多,具体读者们可以可以实际测试

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
re_str = "hello this is python 2.7.13 and Python 3.4.5"
re_obj = re.compile(pattern = "python [0-9]\.[0-9]\.[0-9]",flags=re.IGNORECASE)
res = re_obj.findall(re_str)
print(res)

match方法

match方法,类似于字符串中的startwith方法,

只是match应用在正则表达式中更加强大,更富有表现力,

match函数用以匹配字符串的开始部分,

如果模式匹配成功,返回一个SRE_Match类型的对象,

如果模式匹配失败,则返回一个None,

因此对于普通的前缀匹配,他的用法几乎和startwith一模一样,

例如我们要判断data字符串是否以what和是否以数字开头

s_true = "what is a boy"
s_false = "What is a boy"
re_obj = re.compile("what")
 
print(re_obj.match(string=s_true))
# <_sre.SRE_Match object; span=(0, 4), match='what'
 
print(re_obj.match(string=s_false))
# None
 
s_true = "123what is a boy"
s_false = "what is a boy"
 
re_obj = re.compile("\d+")
 
print(re_obj.match(s_true))
# <_sre.SRE_Match object; span=(0, 3), match='123'>
 
print(re_obj.match(s_true).start())
# 0
print(re_obj.match(s_true).end())
# 3
print(re_obj.match(s_true).string)
# 123what is a boy
print(re_obj.match(s_true).group())
# 123
 
 
print(re_obj.match(s_false))
# None

search方法

search方法,模式匹配成功后,也会返回一个SRE_Match对象,

search方法和match的方法区别在于match只能从头开始匹配,而search可以从字符串的任意位置开始匹配,

他们的共同点是:

如果匹配成功,返回一个SRE_Match对象,

如果匹配失败,返回一个None,

这里还要注意,search仅仅查找第一次匹配,也就是说一个字符串中包含多个模式的匹配,也只会返回第一个匹配的结果,

如果要返回所有的结果,最简单的方法就是findall方法,也可以使用finditer方法

finditer方法

finditer返回一个迭代器,遍历迭代器可以得到一个SRE_Match对象,比如下面的例子

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
re_str = "what is a different between python 2.7.14 and python 3.5.4"
 
re_obj = re.compile("\d{1,}\.\d{1,}\.\d{1,}")
 
for i in re_obj.finditer(re_str):
    print(i)
 
# <_sre.SRE_Match object; span=(35, 41), match='2.7.14'>
# <_sre.SRE_Match object; span=(53, 58), match='3.5.4'>
2、修改类方法介绍

sub方法

re模块sub方法类似于字符串中的replace方法,只是sub方法支持使用正则表达式,

所以,re模块的sub方法使用场景更加广泛

re_str = "what is a different between python 2.7.14 and python 3.5.4"
 
re_obj = re.compile("\d{1,}\.\d{1,}\.\d{1,}")
 
print(re_obj.sub("a.b.c",re_str,count=1))
# what is a different between python a.b.c and python 3.5.4
 
print(re_obj.sub("a.b.c",re_str,count=2))
# what is a different between python a.b.c and python a.b.c
 
print(re_obj.sub("a.b.c",re_str))
# what is a different between python a.b.c and python a.b.c

split方法

re模块的split方法和python字符串中的split方法功能是一样的,

都是将一个字符串拆分成子字符串的列表,区别在于re模块的split方法能够使用正则表达式

比如下面的例子,使用. 空格 : !分割字符串,返回的是一个列表

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
re_str = "what is a different between python 2.7.14 and python 3.5.4 USA:NewYork!Zidan.FRA"
 
re_obj = re.compile("[. :!]")
 
print(re_obj.split(re_str))
# ['what', 'is', 'a', 'different', 'between', 'python', '2', '7', '14', 'and', 'python', '3', '5', '4', 'USA', 'NewYork', 'Zidan', 'FRA']

大小写不敏感设置

 re.compile(flags=re.IGNORECASE)

非贪婪匹配

非贪婪匹配,贪婪匹配总是匹配到最长的那个字符串,

相应的,非贪婪匹配是匹配到最小的那个字符串,只需要在匹配字符串的时候加一个?即可

下面的例子,注意两个.

s = "Beautiful is better than ugly.Explicit is better than impliciy."
 
 
re_obj = re.compile("Beautiful.*y\.")
 
print(re_obj.findall(s))
# ['Beautiful is better than ugly.Explicit is better than implicit.']
 
re_obj = re.compile("Beautiful.*?\.")
 
print(re_obj.findall(s))
# ['Beautiful is better than ugly.']

在正则匹配字符串中加一个小括号,会有什么的效果呢?

如果是要配置一个真正的小括号,那么就需要转义符,

下面的例子大家仔细看下,注意下search方法返回的对象的group(1)这个方法是报错的

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import re
s = "=aa1239d&&& 0a ()--"
 
# obj = re.compile("\(\)")
# search
# rep = obj.search(s)
# print(rep)
# <_sre.SRE_Match object; span=(15, 17), match='()'>
# print(rep.group(1))
# IndexError: no such group
# print(rep.group())
# () 

findall

rep = obj.findall(s)
print(rep)
# ['()']

如果是要返回括号中匹配的字符串中,则该小括号不需要转义符,

findall方法返回的是小伙好中匹配到的字符串,

search.group()方法的返回的整个模式匹配到字符串,

search.group(1)这个是匹配第一个小括号中的模式匹配到的字符串,

search.group(2)这个是匹配第二个小括号中的模式匹配到的字符串,

以此类推

s = "=aa1239d&&& 0a ()--"
rep = re.compile("\w+(&+)")
 
print(rep.findall(s))
# ['&&&']
print(rep.search(s).group())
# aa1239d&&&
print(rep.search(s).group(1))
# &&&

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

python基础教程:re模块用法详解,python基础,python,服务器,mysql,pycharm,正则表达式

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇文章来源地址https://www.toymoban.com/news/detail-681758.html

到了这里,关于python基础教程:re模块用法详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python入门教程23:math模块的用法

    **math是Python 的一个内置模块,它提供了许多数学函数和常量,用于进行数学计算。**以下是一些常用的math模块中的函数和常量: math.pi:圆周率π的近似值,约等于3.14159。 math.e:自然对数的底数e的近似值,约等于2.71828。 math.sqrt(x):求平方根。 math.pow(x, y):求x的y次方。 ma

    2024年02月12日
    浏览(42)
  • Python之re库用法细讲

      在之前的博客中我们学习了【正则表达式】的诸多用法,但是还没有真正在Python代码中使用过。其实Python语言专门提供了 re 模块 ,用于 实现正则表达式的操作 。在实现时,可以使用 re 模块提供的方法(如 search()、match()、findall()等)进行字符串处理,也可以先使用 re

    2024年02月06日
    浏览(33)
  • python中的 collections 模块(用法、详解、底层原理,示例等)

    1.1 defaultdict 功能 可以设置一个默认值作为字典中新key的默认值。该默认值可以是任何对象, 包括函数、列表、元组、集合等。默认值不需要像dict那样事先定义,因为它在需要的时候会自动创建 使用defaultdict,可以简化代码并提高代码的可读性,而且可以防止KeyError异常的出

    2024年04月29日
    浏览(39)
  • 【python】程序运行添加命令行参数argparse模块用法详解

     很多时候,我们的程序要带参数来运行不同的功能,需要解析命令行参数。argparse模块能够很好的提供支持。 argparse是 python 自带的命令行参数解析包,用于解析命令行参数的标准模块。可以让人轻松编写用户友好的命令行接口,还会自动生成帮助和使用手册,并在用户给程

    2024年02月04日
    浏览(49)
  • 【Python】re模块

    正则表达式其本身就是一种小型的,高度专业化的编程语言。在Python中,它被内 嵌在了re模块里面,正则表达式模式被编译成一系列的字节码,然后由用C编写的匹 配引擎执行。 re.search 扫描整个字符串并返回第一个成功的匹配。 语法: 参数 描述 pattern 匹配的正则表达式 s

    2024年02月09日
    浏览(35)
  • 【单片机】有人 WH-LTE-7S1 4G cat1 模块连接服务器,教程,记录。GPRS模块连接服务器教程。

    本文主要介绍了一个4G Cat1模块,该模块具有多种功能和特性。文章接下来展示了4G Cat1模块的封装、引脚名称和功能拓扑图。然后介绍了如何通过串口模块调试WH-LTE-7S1模块,包括线路连接和使用串口助手进行调试的方法。 接着, 文章介绍了如何在公网服务器上建立Python程序

    2024年02月10日
    浏览(60)
  • 【云服务器 ECS 实战】ECS 快照&镜像的原理及用法详解

    1. 阿里云 ECS 快照概述 阿里云快照服务支持所有类型的云盘,是一种低成本、便捷高效的数据备份手段,也可以用于创建镜像或容灾、分发数据副本等。对于某一个重要的磁盘数据,当我们想要给他做一个备份时,就需要用到快照。此外在进行磁盘备份之后,也有助于我们随

    2024年02月03日
    浏览(38)
  • Python:正则表达式之re.group()用法

    Python正则表达式之re.group()用法学习笔记 正则表达式是在处理字符串时非常有用的工具,而re.group()是在匹配到的文本中提取特定分组内容的方法之一。 在正则表达式中,通过圆括号可以创建一个或多个分组。re.group()用于获取匹配到的文本中的指定分组内容。 输出结果: grou

    2024年01月17日
    浏览(45)
  • 【单片机】有人 WH-LTE-7S1 4G cat1 模块连接服务器,教程,记录。GPRS模块连接服务器教程。socket编程。

    本文主要介绍了一个4G Cat1模块,该模块具有多种功能和特性。文章接下来展示了4G Cat1模块的封装、引脚名称和功能拓扑图。然后介绍了如何通过串口模块调试WH-LTE-7S1模块,包括线路连接和使用串口助手进行调试的方法。 接着, 文章介绍了如何在公网服务器上建立Python程序

    2024年02月08日
    浏览(59)
  • python re 模块 正则表达式

    ^ 表示匹配字符串的开始位置 (例外 用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串) $ 表示匹配字符串的结束位置 * 表示匹配 零次到多次(记忆方法: 符号是星星,天上的星星可以是无数个也可以看不到 ) + 表示匹配 一次到多次 (记忆方法: 符号是加号,增加

    2024年02月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包