栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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


正则表达式介绍

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

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


一、正则表达式语法规则

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

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

二、Python中应用正则表达式 1.导入re标准库

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

  1. re.compile() 用于通过正则表达式语法创建正则表达式对象以方便后续调用
#示例
import re
Tmpre1=re.compile(r'2(5[0-5]|4d)|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]|4d)|1?d{1,2}')
Tmpre2=re.compile(r'2(5[0-5]|4d)|1?d{1,2}')
print(Tmpre1.match(str1))
print(Tmpre1.match(str2))

输出如下:


None
  1. re.search() 用于人文本中搜索第一个匹配的文本,并返回找到的第一个文本的内容,如果没有找到则返回None
#示例:
import re

str1 = '...241.255.2.30'
re4=re.compile(r'2(5[0-5]|4d)|1?d{1,2}')
re5=re.compile(r'25[0-5]|24d|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)))

输出如下:


March               
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 re

def ReFind(str1,march,start=0):
    """Search all the string find out all the text which fullfill the re

    Args:
        str1 (string): the string which going to be search
        march (Match type of the re.compile()): your re.compile()type
        start (int, optional): start position of the string . Defaults to 0.

    Returns:
        string: all the text which founded
    """    
    TmpResut = ''
    startPos=0
    try:
        TmpResut = march.search(str1,start).group()
        startPos = march.search(str1,start).end()
        if startPos 

输出如下:

241,255,2,30

总结

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/958800.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号