正则表达式装逼(实用)指南

嵌入式ARM 2020-11-06 00:00

正则表达式(Regular Expression,或者Regex),能干嘛?听说很强悍,很多人用来查找字符串,或者替换某些字符串。

实际上,正则表达式有四个功能:

  1. 匹配,即查找,例如,从杂乱的一堆文本里面,找到你想要的

  2. 替换,按某种规则替换内容

  3. 分割,将文本内容按某种规则分割开来

  4. 检验,检验某文本是否符合规则

如果没玩过正则表达式,也看不出这四个功能到底能干嘛。

我刚学那阵,觉得这东西,玩点小儿科的东西还行,能干大事?

后来,越用越多,发现这货在你遇到困境的时候可以力挽千钧。

话说回来,这个东西能装逼吗?

1. 你女朋友喊你查她的号码

你女朋友(假如你有)有一天跟你撒娇,她给你一个txt文档,里面存着一个她的号码,让你把她的号码找出来。此时,你不记得她的完整号码了,如果找不出来,晚上就得跪CPU了。刹那间,你想到了,她的号码有这样的数字……771……55(亲亲你……嗯嗯)。于是你,快速用Notepad++打开含有一堆乱七八糟电话号码的文本。查找输入:1\d+771\d+55,然后回车,Bingo!不信,你试试:

 15672846712 
 13892738409           021-82937465 
 13263748592   18028374732 
 010-27384762 
 13877190955 022-2873625
 1324353738
 1621723839 38293923 48234934
 3123372390 1367282902 1356282920
 ......

好吧,故事是虚构的,也别幻想你女朋友真的让你查号码了。

简单解释一下,这里面的\d就是表示digital的意思即0-9都可以用\d来描述,而\d+就表示有多个数字。这个是正则表达式中非常简单的应用了。

2. 查找文件中某字符串内容

模糊搜索到底怎么搞的,你有想过么?要不先来玩下这个,好像有种“万军之中取人头颅如探囊取物”感觉。

例如,你要查找AUTOSAR代码中Os Timer相关的某些函数,这些函数有些特征,带有Os_Pit的字符,那么你可以用linux上的grep命令或者用vscode的正则表达式功能Os_\w+Pit\w+来查找。

上面这个\w就是匹配word的意思。其实,原理跟上一个例子类似,原理很简单。

实际上,“匹配或者查找”是正则表达式最基本的功能了。

3. 爬取和解析一些不可描述的内容

正则表达式还能不能干点刺激的事情呢?

我有个朋友(别问我朋友是谁,有没有他的联系方式……)。他为了下载某些小视频,硬生生地学会了爬虫,然后,下载了一堆封面图片和一些不可描述的文字描述,还有BT种子,我问他有多少,他说1TB的硬盘快满了……

我问他是怎么做到的,他说他用了BeautifulSoup库来爬的,傻瓜式的,很简单,大有要传授我这些秘技的样子。他还按番号做了分类,每一类番号,还生成一个markdown文本,其中用的最多的就是Regex,例如某类番号可以用ABC-\d+筛选出来。

搞完后,他“握草”了好几次,惊叹这个小小的岛国,怎么可以拍这么多这些不可描述的小视频,而且还……(此处省略255个字)

我很好奇,这个爬虫这么好玩?我专门研究了下这个爬虫神器BeautifulSoup,其中很多方法是支持正则表达式的,如re.compile('[a-z]+-[0-9]+',re.I).findall(str_temp)。用起来简直是如虎添翼……

玩归玩,正则表达式在我眼里应该多干些正经事的。

4.  批量格式化处理

我有一堆16进制数,我想用到C代码里面,例如将下面的内容加上0x和逗号,怎么搞?

 01234567
 89ABCDEF
 1011121314151617
 18191A1B1C1D1E1F
 2021222324252627
 28292A2B2C2D2E2F

作为一个很懒的程序员,我肯定不会一个个添加的。试试这个:

查找目标: (\w+)[\s!\n]

替换为:0x\1,


(\w+)就是那一个个十六进制数,这个括号的作用,就先记录一下,把它放一个分组里面,等下还要用。

[\s!\n]又是啥玩意?中括号的意思,就是匹配中括号里面任意一个内容,\s就是空字符,包括空格、换行符、TAB等。\n就是换行啦,而!\n呢,非换行咯。整个意思就是,匹配任意不包含换行符的空字符。

下面,这个0x\1,中的\1就是上面查到的分组的内容。

5.  将数据格式化后复制到Excel

上面的例子有点啰嗦了,看个简单的,有以下数据,想将其中的0x和逗号去掉,并复制到Excel中。

 0x20, 0x21,   0x22, 0x23,   0x24,   0x25, 0x26, 0x27, 0x28,     
 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
 0x30, 0x31, 0x32,   0x33, 0x34, 0x35, 0x36, 0x37,   0x38, 0x39,   0x3A, 0x3B,   0x3C, 0x3D, 0x3E, 0x3F,
 0x40,  

实际需要分两步:

  1. 想将其中的0x和逗号去掉;

  2. 复制到Excel中(需要将多余的空格换成Tab字符,才能将多个数值分别填到不同单元格中)。

按照上面的例子,需要:

查找目标: 0x(\w+),\s+

替换为:\1\t

自己领悟一下,哈哈!雕虫小技,还有没有别的?

6. 代码生成与格式化

现有播放器很多个命令,我想将其生成对应的函数,怎么办?

命令:

 play
 pause
 stop
 prev
 next
 fastforward
 fastrewind
 ……

函数:

 BOOL player_play_cmd_func(void* p)
 {
     
 }
 
 BOOL player_pause_cmd_func(void* p)
 {
     
 }
 ……

一个个手动敲进去?我这么懒,才不呢。

试试这个:

查找目标: ^(\w+)$

替换为:BOOL player_\1_cmd_func\(void* p\)\n{\n\n}\n

好像都很简单啊,有没难一点的啊!

7.  删除不含某些信息的的内容

匹配查找包含某些信息的内容倒是容易,怎么匹配不包含的内容啊?

例如,我想删掉不是.mid后缀的内容,怎么搞?

 2009/06/11 05:22           24,253 flourish.mid
 2009/06/11 05:24           118,060 ir_begin.wav
 2009/06/11 05:24           126,252 ir_end.wav
 2009/06/11 05:24           178,732 ir_inter.wav
 2009/06/11 05:22           228,396 notify.wav
 2009/06/11 05:22           40,075 onestop.mid
 2009/06/11 05:22           111,788 recycle.wav
 2009/06/11 05:22           88,236 ringout.wav
 2009/06/11 05:22           22,097 town.mid

试试这个:

查找目标:^((?!(2009.*\.mid$)).)*$

替换为:

看不懂?好好研究下!哈哈哈……

7.  搭上脚本语言的快车

在Python、Ruby、Perl、JavaScript上用正则表达式,简直会爽到飞起来……前提你要学会正则表达式各种语法。

这个就不装逼了,以后慢慢玩。

-END-


来源 | 嵌入式软件实战派

作者 | 实战派小师弟


整理文章为传播相关技术,版权归原作者所有 |

如有侵权,请联系删除 |


【1】超长干货为你解析:从串口驱动到Linux驱动模型,嵌入式必会!

【2】超全!嵌入式必懂的CAN总线一文讲通了

【3】干货:嵌入式系统设计开发大全!(万字总结)

【4】嵌入式系统求职回忆录:广嵌、迈瑞、华为、智光……

【5】嵌入式行业真的没有前途吗?



嵌入式ARM 关注这个时代最火的嵌入式ARM,你想知道的都在这里。
评论
  • 最近几年,新能源汽车愈发受到消费者的青睐,其销量也是一路走高。据中汽协公布的数据显示,2024年10月,新能源汽车产销分别完成146.3万辆和143万辆,同比分别增长48%和49.6%。而结合各家新能源车企所公布的销量数据来看,比亚迪再度夺得了销冠宝座,其10月新能源汽车销量达到了502657辆,同比增长66.53%。众所周知,比亚迪是新能源汽车领域的重要参与者,其一举一动向来为外界所关注。日前,比亚迪汽车旗下品牌方程豹汽车推出了新车方程豹豹8,该款车型一上市就迅速吸引了消费者的目光,成为SUV
    刘旷 2024-12-02 09:32 119浏览
  •         温度传感器的精度受哪些因素影响,要先看所用的温度传感器输出哪种信号,不同信号输出的温度传感器影响精度的因素也不同。        现在常用的温度传感器输出信号有以下几种:电阻信号、电流信号、电压信号、数字信号等。以输出电阻信号的温度传感器为例,还细分为正温度系数温度传感器和负温度系数温度传感器,常用的铂电阻PT100/1000温度传感器就是正温度系数,就是说随着温度的升高,输出的电阻值会增大。对于输出
    锦正茂科技 2024-12-03 11:50 111浏览
  • 遇到部分串口工具不支持1500000波特率,这时候就需要进行修改,本文以触觉智能RK3562开发板修改系统波特率为115200为例,介绍瑞芯微方案主板Linux修改系统串口波特率教程。温馨提示:瑞芯微方案主板/开发板串口波特率只支持115200或1500000。修改Loader打印波特率查看对应芯片的MINIALL.ini确定要修改的bin文件#查看对应芯片的MINIALL.ini cat rkbin/RKBOOT/RK3562MINIALL.ini修改uart baudrate参数修改以下目
    Industio_触觉智能 2024-12-03 11:28 87浏览
  • 概述 说明(三)探讨的是比较器一般带有滞回(Hysteresis)功能,为了解决输入信号转换速率不够的问题。前文还提到,即便使能滞回(Hysteresis)功能,还是无法解决SiPM读出测试系统需要解决的问题。本文在说明(三)的基础上,继续探讨为SiPM读出测试系统寻求合适的模拟脉冲检出方案。前四代SiPM使用的高速比较器指标缺陷 由于前端模拟信号属于典型的指数脉冲,所以下降沿转换速率(Slew Rate)过慢,导致比较器检出出现不必要的问题。尽管比较器可以使能滞回(Hysteresis)模块功
    coyoo 2024-12-03 12:20 116浏览
  • 《高速PCB设计经验规则应用实践》+PCB绘制学习与验证读书首先看目录,我感兴趣的是这一节;作者在书中列举了一条经典规则,然后进行详细分析,通过公式推导图表列举说明了传统的这一规则是受到电容加工特点影响的,在使用了MLCC陶瓷电容后这一条规则已经不再实用了。图书还列举了高速PCB设计需要的专业工具和仿真软件,当然由于篇幅所限,只是介绍了一点点设计步骤;我最感兴趣的部分还是元件布局的经验规则,在这里列举如下:在这里,演示一下,我根据书本知识进行电机驱动的布局:这也算知行合一吧。对于布局书中有一句:
    wuyu2009 2024-11-30 20:30 125浏览
  • 当前,智能汽车产业迎来重大变局,随着人工智能、5G、大数据等新一代信息技术的迅猛发展,智能网联汽车正呈现强劲发展势头。11月26日,在2024紫光展锐全球合作伙伴大会汽车电子生态论坛上,紫光展锐与上汽海外出行联合发布搭载紫光展锐A7870的上汽海外MG量产车型,并发布A7710系列UWB数字钥匙解决方案平台,可应用于数字钥匙、活体检测、脚踢雷达、自动泊车等多种智能汽车场景。 联合发布量产车型,推动汽车智能化出海紫光展锐与上汽海外出行达成战略合作,联合发布搭载紫光展锐A7870的量产车型
    紫光展锐 2024-12-03 11:38 103浏览
  • RDDI-DAP错误通常与调试接口相关,特别是在使用CMSIS-DAP协议进行嵌入式系统开发时。以下是一些可能的原因和解决方法: 1. 硬件连接问题:     检查调试器(如ST-Link)与目标板之间的连接是否牢固。     确保所有必要的引脚都已正确连接,没有松动或短路。 2. 电源问题:     确保目标板和调试器都有足够的电源供应。     检查电源电压是否符合目标板的规格要求。 3. 固件问题: &n
    丙丁先生 2024-12-01 17:37 102浏览
  • 学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&
    youyeye 2024-11-30 14:30 78浏览
  • 作为优秀工程师的你,已身经百战、阅板无数!请先醒醒,新的项目来了,这是一个既要、又要、还要的产品需求,ARM核心板中一个处理器怎么能实现这么丰富的外围接口?踌躇之际,你偶阅此文。于是,“潘多拉”的魔盒打开了!没错,USB资源就是你打开新世界得钥匙,它能做哪些扩展呢?1.1  USB扩网口通用ARM处理器大多带两路网口,如果项目中有多路网路接口的需求,一般会选择在主板外部加交换机/路由器。当然,出于成本考虑,也可以将Switch芯片集成到ARM核心板或底板上,如KSZ9897、
    万象奥科 2024-12-03 10:24 68浏览
  • 11-29学习笔记11-29学习笔记习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-02 23:58 73浏览
  • 国产光耦合器正以其创新性和多样性引领行业发展。凭借强大的研发能力,国内制造商推出了适应汽车、电信等领域独特需求的专业化光耦合器,为各行业的技术进步提供了重要支持。本文将重点探讨国产光耦合器的技术创新与产品多样性,以及它们在推动产业升级中的重要作用。国产光耦合器创新的作用满足现代需求的创新模式新设计正在满足不断变化的市场需求。例如,高速光耦合器满足了电信和数据处理系统中快速信号传输的需求。同时,栅极驱动光耦合器支持电动汽车(EV)和工业电机驱动器等大功率应用中的精确高效控制。先进材料和设计将碳化硅
    克里雅半导体科技 2024-11-29 16:18 181浏览
  • 戴上XR眼镜去“追龙”是种什么体验?2024年11月30日,由上海自然博物馆(上海科技馆分馆)与三湘印象联合出品、三湘印象旗下观印象艺术发展有限公司(下简称“观印象”)承制的《又见恐龙》XR嘉年华在上海自然博物馆重磅开幕。该体验项目将于12月1日正式对公众开放,持续至2025年3月30日。双向奔赴,恐龙IP撞上元宇宙不久前,上海市经济和信息化委员会等部门联合印发了《上海市超高清视听产业发展行动方案》,特别提到“支持博物馆、主题乐园等场所推动超高清视听技术应用,丰富线下文旅消费体验”。作为上海自然
    电子与消费 2024-11-30 22:03 98浏览
  • 艾迈斯欧司朗全新“样片申请”小程序,逾160种LED、传感器、多芯片组合等产品样片一触即达。轻松3步完成申请,境内免费包邮到家!本期热荐性能显著提升的OSLON® Optimal,GF CSSRML.24ams OSRAM 基于最新芯片技术推出全新LED产品OSLON® Optimal系列,实现了显著的性能升级。该系列提供五种不同颜色的光源选项,包括Hyper Red(660 nm,PDN)、Red(640 nm)、Deep Blue(450 nm,PDN)、Far Red(730 nm)及Ho
    艾迈斯欧司朗 2024-11-29 16:55 175浏览
  • TOF多区传感器: ND06   ND06是一款微型多区高集成度ToF测距传感器,其支持24个区域(6 x 4)同步测距,测距范围远达5m,具有测距范围广、精度高、测距稳定等特点。适用于投影仪的无感自动对焦和梯形校正、AIoT、手势识别、智能面板和智能灯具等多种场景。                 如果用ND06进行手势识别,只需要经过三个步骤: 第一步&
    esad0 2024-12-04 11:20 58浏览
  • 光伏逆变器是一种高效的能量转换设备,它能够将光伏太阳能板(PV)产生的不稳定的直流电压转换成与市电频率同步的交流电。这种转换后的电能不仅可以回馈至商用输电网络,还能供独立电网系统使用。光伏逆变器在商业光伏储能电站和家庭独立储能系统等应用领域中得到了广泛的应用。光耦合器,以其高速信号传输、出色的共模抑制比以及单向信号传输和光电隔离的特性,在光伏逆变器中扮演着至关重要的角色。它确保了系统的安全隔离、干扰的有效隔离以及通信信号的精准传输。光耦合器的使用不仅提高了系统的稳定性和安全性,而且由于其低功耗的
    晶台光耦 2024-12-02 10:40 120浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦