0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

python中re.findall和re.match的使用

我快闭嘴 来源:小杜的芯片验证日记 作者:小杜的芯片验证日 2022-09-15 09:18 次阅读

小杜今天需要从run.log中提取一些关键信息,又一次使用到了python的re.findall和re.match,也有了一点新的收获。随意写一点,当作记录。

我的具体使用场景是需要从数千行的run.log文件中提取出大括号 { } 中包住的数据,数据有很多个,但格式都很固定,为 ‘hx 或 ‘hxx 的形式,每个数据由一个逗号和空格隔开,即:

{'hx, 'hx, 'hxx, 'hx, 'hxx, 'hxx, ...}

但大括号中的数据又只有部分固定位是我所需要的。

作为python脚本初学者,我目前的解决方法是先把大括号和其中的数据提取出来,再使用正则表达式的group将所需的固定位数据提取出来。

  • re.findall - 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。

  • re.match - 尝试从字符串的起始位置匹配,如果模式在字符串中间,则不会匹配成功,match( ) 返回None。

这样做的是因为这段数据并不在行首,且数据前面有一长串的打印信息,并不方便直接使用re.match,因此先使用re.findall将所有符合该pattern的数据提取出来,再使用re.match配合group提取固定位信息就方便许多(正则好写很多)。下面是我的两段python脚本:

import osimport reimport string
file_input = 'path/run.log'file_output = 'path/xxx1.dat'fi = open(file_input, 'r')fo = open(file_output, 'w')
pattern = '...'   #匹配大括号和数据的正则表达式
for line in f1.readlines():  data = re.findall(pattern, line)  fo.write(data)  fo.write('
')
fi.close()fo.close()
import osimport reimport string
file_input = 'path/xxx1.dat'file_output = 'path/xxx2.dat'fi = open(file_input, 'r')fo = open(file_output, 'w')
pattern = '...'   #带有( )的正则表达式,匹配固定位数据
for line in f1.readlines():  data1 = re.match(pattern, line).group(1)  data2 = re.match(pattern, line).group(3)  data3 = re.match(pattern, line).group(5)  fo.write(data1)  fo.write(data2)  fo.write(data3)  fo.write('
')
fi.close()fo.close()

这样通过连续运行2次python脚本,再合理使用write( ),就可以提取出我需要的固定位数据,并且以我需要的格式写入到输出的目标文件中。

作为新手,写的很简易。能不能把这两个步骤集成到一个python脚本中?有没有更便捷的实现方法?还需要继续学习、思考。


审核编辑:汤梓红


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    55

    文章

    4778

    浏览量

    84439
  • 脚本
    +关注

    关注

    1

    文章

    387

    浏览量

    14829

原文标题:日常 - re.findall 和 re.match 的简单使用

文章出处:【微信号:小杜的芯片验证日记,微信公众号:小杜的芯片验证日记】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    python实现网页爬虫爬取图片

    re.compile() 可以把正则表达式编译成一个正则表达式对象.re.findall() 方法读取html 包含 imgre(正则表达式)的数据。运行脚本将得到整个页面包含图
    发表于 04-05 15:32

    Python面试必看的10个问题

    的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的deep.deepcopy()函数}2、Python里面match()和search()的区别?答:re模块
    发表于 02-28 17:00

    利用Python实现简单图片下载功能

    ; pic_ext' imgre = re.compile(reg) imglist = re.findall(imgre,html) return imglisthtml = getHtml("
    发表于 09-04 13:49

    初识 Python 正则表达式

    风格的正则表达式模式。re 模块使 Python 语言拥有全部的正则表达式功能。下面通过实例,一步一步来初步认识正则表达式。比如在一段字符串寻找是否含有某个字符或某些字符,通常我们使用内置函数来实现
    发表于 03-17 16:44

    python正则表达式字符集

    = re.findall('u[abc]v', a)print(findall)# 如果是连续的字母,数字可以使用 - 来代替l = re.findall('u[a-c]v', a)print(l)# 取
    发表于 03-17 16:48

    python正则表达式数量词

    = 'java*&39android##@@python'# 数量词findall = re.findall('[a-z]{4,7}', a)print(findall)输出结果:[
    发表于 03-18 16:05

    python正则表达式的常用函数

    string还有剩余字符,仍然视为成功。格式:re.match(pattern, string[, flags=0])print(re.match('com','comwww.csdn').group
    发表于 03-18 16:12

    pythonurllib3和requests的使用

    ; % res.status)# 获取响应内容data = res.data.decode("utf-8")# 正则解析并输出print(re.findall("(.*?)"
    发表于 03-21 16:08

    索尼RE-3机芯彩电图纸

    索尼RE-3机芯彩电图纸
    发表于 01-24 17:30 97次下载
    索尼<b class='flag-5'>RE</b>-3机芯彩电图纸

    RE46C114 RE46C114是一种电离烟雾探测器AFE

    电子发烧友网为你提供()RE46C114相关产品参数、数据手册,更有RE46C114的引脚图、接线图、封装手册、中文资料、英文资料,RE46C114真值表,RE46C114管脚等资料,
    发表于 04-18 23:13

    RE46C112 RE46C112是一种电离烟雾探测器AFE

    电子发烧友网为你提供()RE46C112相关产品参数、数据手册,更有RE46C112的引脚图、接线图、封装手册、中文资料、英文资料,RE46C112真值表,RE46C112管脚等资料,
    发表于 04-18 23:13

    帖子主题:Re:Колибрипрограммированияпрограммирования

    帖子主题:Re:Колибрипрограммированияпрограммирования
    发表于 05-07 16:47 0次下载
    帖子主题:<b class='flag-5'>Re</b>:Колибрипрограммированияпрограммирования

    发帖主题:Re:Колибри0.7.0

    发帖主题:Re:Колибри0.7.0
    发表于 06-08 19:08 2次下载
    发帖主题:<b class='flag-5'>Re</b>:Колибри0.7.0

    Python的十个安全陷阱(二)

    恶意字符串。在 Python re.matchre.search 之间有着细微的区别,我们将在下面的代码片段中演示。
    的头像 发表于 03-24 16:47 1405次阅读

    辐射RE整改有哪些方法?

    辐射RE整改有哪些方法?|深圳比创达电子EMC
    的头像 发表于 10-31 10:57 1637次阅读
    辐射<b class='flag-5'>RE</b>整改有哪些方法?