文章目录

  • 正则表达式介绍
  • 一、正则表达式语法规则
  • 二、Python中应用正则表达式
    • 1.导入re标准库
    • 2.如何找到所有匹配正则表达式的文本?
    • Python re模块常用的几种正则表达式方式
  • 总结

正则表达式介绍

正则表达式用于在字符串文本中匹配所要搜索的字符串样式,比如验证用户输入的邮箱格式是否正确,IP地址格式是否有误以及查找字符串中所有的网址等等…

注意,正则表达式是对文本格式的一种概括语法,其不局限于Python语言,只要是支持正则表达式的语言都可以用应用


一、正则表达式语法规则

正则表达式详细的语法可以百度或者参考菜鸟教程正则表达式
练习正则表达式语法可以参考菜鸟正则表达式在线测试器里面同时有一些常见的格式如身份证、IP等等现成的格式可套用。

篇幅较多本文在此不再复述

二、Python中应用正则表达式

1.导入re标准库

re是python用于支持正则表达式的标准库
常用的函数及语法如下:

  1. re.compile() 用于通过正则表达式语法创建正则表达式对象以方便后续调用
#示例
import re
Tmpre1=re.compile(r'2(5[0-5]|4\d)|1?\d{1,2}')
  1. re.match() 用于从文本开始查找匹配的文本内容,如果没有找到则返回None
import re
str1 = '241.255.2.30'
str2 = '...241.255.2.30'
Tmpre1=re.compile(r'2(5[0-5]|4\d)|1?\d{1,2}')
Tmpre2=re.compile(r'2(5[0-5]|4\d)|1?\d{1,2}')
print(Tmpre1.match(str1))
print(Tmpre1.match(str2))

输出如下:

<re.Match object; span=(0, 3), match='241'>
None
  1. re.search() 用于人文本中搜索第一个匹配的文本,并返回找到的第一个文本的内容,如果没有找到则返回None
#示例:
import restr1 = '...241.255.2.30'
re4=re.compile(r'2(5[0-5]|4\d)|1?\d{1,2}')
re5=re.compile(r'25[0-5]|24\d|1?\d{1,2}')
print(re4.search(str1,3))
print('{:20}{}'.format('March',re4.search(str1)))
print('{:20}{}'.format('March.group()',re4.search(str1).group()))#返回一个或者多个匹配的子组。如果只有一个参数,结果就是一个字符串,如果有多个参数,结果就是一个元组(每个参数对应一个项),如果没有参数,组1默认到0(整个匹配都被返回)
print('{:20}{}'.format('March.startpos',re4.search(str1).start()))
print('{:20}{}'.format('March.end()',re4.search(str1).end()))#返回 group 匹配到的字串的开始和结束标号。group 默认为0(意思是整个匹配的子串)。如果 group 存在,但未产生匹配,就返回 -1
print('{:20}{}'.format('March.endpos',re4.search(str1).endpos))#这个是正则引擎停止在字符串搜索一个匹配的索引位置。
print('{:20}{}'.format('March.re',re4.search(str1).re))#返回产生这个实例的 正则对象
print('{:20}{}'.format('March.pos',re4.search(str1).pos))#这个是正则引擎开始在字符串搜索一个匹配的索引位置。
print('{:20}{}'.format('March.regs',re4.search(str1).regs))
print('{:20}{}'.format('March.string',re4.search(str1).string))#输出所要搜索的字符串
print('{:20}{}'.format('March.findall',re4.findall(str1)))
print('{:20}{}'.format('March.findall',re5.findall(str1)))

输出如下:

<re.Match object; span=(3, 6), match='241'>
March               <re.Match object; span=(3, 6), match='241'>
March.group()       241
March.end()         6
March.start()       3
March.endpos        15
March.re            re.compile('2(5[0-5]|4\\d)|1?\\d{1,2}')
March.pos           0
March.regs          ((3, 6), (4, 6))
March.string        ...241.255.2.30
March.findall       ['41', '55', '', '']
March.findall       ['241', '255', '2', '30']

注意上面示例中re.findall()当匹配带括号和不带括号的正则表达式的时候输出值的不同:

  • 当正则表达式带括号时,findall()返回的值只是包含在括号之内的数值
  • 当正则表达 式不带括号时,findall()返回的值是正则表达式所所找到的所有的匹配值

2.如何找到所有匹配正则表达式的文本?

无论是re,match()或者re.search()都只能搜索到一个字符结果即返回,那么如何将一段字符串中的所有文本都找出来并返回呢?
没有直接的方法,但我们可以通过调用search()函数自己做个函数来实现

Pattern.search(string[, pos[, endpos]]) 扫描整个 string 寻找第一个匹配的位置,
并返回一个相应的 匹配对象。如果没有匹配,就返回 None ;注意它和零长度匹配是不同的。

通过在search()中设置每次搜索的开始位置,让search()遍历整个文本串即可完成整个文本的搜索

代码实现:

import redef ReFind(str1,march,start=0):"""Search all the string find out all the text which fullfill the reArgs:str1 (string): the string which going to be searchmarch (Match type of the re.compile()): your re.compile()typestart (int, optional): start position of the string . Defaults to 0.Returns:string: all the text which founded"""    TmpResut = ''startPos=0try:TmpResut = march.search(str1,start).group()startPos = march.search(str1,start).end()if startPos<len(str1):TmpResut += ','+ReFind(str1,march,startPos)return TmpResutelse:return TmpResut    except :print('re Error expected')

输出如下:

241,255,2,30

Python re模块常用的几种正则表达式方式

import re# 正则表达式match用法,其会从字符串开头进行匹配,如果不匹配则返回None,反之找到一个匹配后需要调用group()来获取找到的值
print("re.match is: {}".format(re.match(r"\w", "hf").group()))
print("re.match is: {}".format(re.match(r"\w", "<hf").group()) if re.match(r"\w", "<hf") is not None else "No value")
# search 会在字符串中从前向后寻找,直到找到一个匹配值,如果不匹配则返回None,反之找到一个匹配后需要调用group()来获取找到的值
print("re.search is: {}".format(re.search(r"(h|f|\d+s)", "<hf10s").group()))
# findall用于寻找字符串中所有非重复的匹配项并返回一个列表或元组形式的结果
print("re.findall is: {}".format(re.findall(r"(h|f|\d+s)", "<hf10s")))
# finditer用于寻找字符串中所有非重复的匹配项并返回一个迭代器,迭代器以match类型返回
for m_findall in re.finditer(r"(h|f|\d+s)", "<hf10s"):print("find all value is: {}".format(m_findall.group()))

输出结果:
re.match is: h
No value
re.search is: h
re.findall is: [‘h’, ‘f’, ‘10s’]
find all value is: h
find all value is: f
find all value is: 10s


总结

Python 通过re标准库来实现正则表达式匹配 正常情况下re.search()比re.match()要方便些
通过re.group()来获取相应的结果,但group结果也要根据所要搜索的参数返回整个字符串或者元组
通过re.start()和re.end()来获取正则匹配结果的开始位置及结束位置

Python 正则表达式应用总结,如何找出全部匹配文本相关推荐

  1. Python 一键吸猫!找出磁盘里所有猫照

    最近在整理我磁盘上的照片,发现不少猫照,突然觉得若能把这些猫照都挑出来,观察它们的成长轨迹也是一件不错的事情.一张一张的找实在是太费劲了,能不能自动化地找出来呢? 目标检测,是许多计算机视觉应用的重中 ...

  2. python 列表求最大值_Python找出列表中的最大数和最小数

    Python找出列表中数字的最大值和最小值 思路: 先使用冒泡排序将列表中的数字从小到大依次排序 取出数组首元素和尾元素 运行结果: 源代码: 1 ''' 2 4.编写函数,功能:找出多个数中的最大值 ...

  3. Python根据pe和roe找出最佳股票

    看了个文章说根据PE和ROE就可以找出最有价值的股票进行投资 原理是pe越高排名越低,roe越高排名越高,具体需要查询下这两个描述的意义 首先要拿到所有的数据,当然通过爬虫来拉取,然后我选择对数据进行 ...

  4. python字符串面试题:找出一个字符串中第一个字母和最后一个字符是第一次重复,中间没有重复且最长的子串...

    1.给出任意一个字符串,打印一个最长子串字符串及其长度,如果有相同长度的子字符串,都要一起打印出来,该子字符串满足以下条件, 第一个字母和最后一个字符是第一次重复 这个子字符串的中间字母没有重复 这个 ...

  5. Python(详解)找出一个整数的所有因子---显示所有的最小因子--素因子

    找出一个整数的所有因子 显示所有的最小因子–素因子 例如输入整数120,那么输出如下 2,2,2,3,5 解: n=eval(input("输入一个整数")) i=2 #我们从二开 ...

  6. numpy是python标准库吗_python – 找出Numpy是否使用了哪个BLAS库

    numpy.show_config()并不总是提供可靠的信息.例如,如果我在Ubuntu 14.04上apt-get install python-numpy,则np.show_config()的输出 ...

  7. python怎么用for循环找出最大值_在for循环Python中查找前10个最大值

    我试图在for循环中找到前10/300的值.我知道如何找到整个循环的最大值,但我试图计算300个值,然后只使用300个值中的前10个值.在 这是我的for循环:random.shuffle(folde ...

  8. python怎么用for循环找出最大值_用for循环语句写一个在输入的十个数字中求最大和最小值的python程序应该怎么写?...

    "在输入的十个数字中求最大和最小值的 python 代码"这个需求,在不同时间来看,解题思路不同,所需要的 python 知识点不同. 作为萌新的我,为此特意整理了 3 种解法,以 ...

  9. python怎么用for循环找出最大值_如何获取Python简单for循环索引

    如何获取Python简单for循环索引 这篇文章主要介绍了如何获取Python简单for循环索引,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Py ...

最新文章

  1. 2018,开工第一天
  2. 原生js追加html代码,原生js实现给指定元素的后面追加内容
  3. python清洗文本数据_02.数据预处理之清洗文本信息
  4. Go语言,在Ubuntu9.10和Windows安装
  5. python创建person类用printinfo方法_Python学习期刊Day11类和对象(2),日记,与,下
  6. 关于求XXX.class.getResource(xxx).getPath()的用法
  7. 用编程解决生活中的问题
  8. 单片机TM4C123学习(一):GPIO模块的应用
  9. 64.Linux/Unix 系统编程手册(下) -- 伪终端
  10. keras中使用ImageDataGenerator对MINST数据集数据增强
  11. Tapestry5的基础知识
  12. R语言快捷键大全中文版
  13. Windows平台实现真实时毫秒级4K H264/H265直播技术(硬编码技术方案)
  14. 直流DC稳压降压电源模块芯片简单对比
  15. matlab求解整数规划问题
  16. matlab画图x轴
  17. ElasticSearch服务器泄露 5700万个人数据外泄
  18. WIFI共享精灵 2013 电脑共享wifi
  19. 家庭教育机构如何线上线下灵活结合?
  20. AS部署失败,Device supports,but APK only supports...

热门文章

  1. 魅族mx1Android4.4,魅族MX 定制 Flyme-1.1.8 正式版固件(适用于香港)
  2. UVM重点归纳(二)之TLM通信
  3. 手机端-上传头像并裁剪
  4. 分支类1 7-6 判断体质完整版 (10 分)
  5. 最新:苹果或将推出“软件锁”,防止用户更换非原装电池
  6. 优化 | 谈谈运筹学在工业界应用的心得体会
  7. 贴图、纹理、材质的区别是什么?
  8. Netconf网络配置协议讲解
  9. 双Gige相机连接电脑
  10. 计算机控制系统步进电机,步进电机的计算机控制系统设计.doc