女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

正則表達式實用指南

Q4MP_gh_c472c21 ? 來源:嵌入式軟件實戰派 ? 作者:實戰派小師弟 ? 2020-11-16 15:34 ? 次閱讀

正則表達式(Regular Expression,或者Regex),能干嘛?聽說很強悍,很多人用來查找字符串,或者替換某些字符串。

實際上,正則表達式有四個功能:

匹配,即查找,例如,從雜亂的一堆文本里面,找到你想要的

替換,按某種規則替換內容

分割,將文本內容按某種規則分割開來

檢驗,檢驗某文本是否符合規則

如果沒玩過正則表達式,也看不出這四個功能到底能干嘛。

我剛學那陣,覺得這東西,玩點小兒科的東西還行,能干大事?

后來,越用越多,發現這貨在你遇到困境的時候可以力挽千鈞。

話說回來,這個東西能裝逼嗎?

1. 你女朋友喊你查她的號碼

你女朋友(假如你有)有一天跟你撒嬌,她給你一個txt文檔,里面存著一個她的號碼,讓你把她的號碼找出來。此時,你不記得她的完整號碼了,如果找不出來,晚上就得跪CPU了。剎那間,你想到了,她的號碼有這樣的數字……771……55(親親你……嗯嗯)。于是你,快速用Notepad++打開含有一堆亂七八糟電話號碼的文本。查找輸入:1d+771d+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+Pitw+來查找。

上面這個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! ]

替換為:0x1,

(w+)就是那一個個十六進制數,這個括號的作用,就先記錄一下,把它放一個分組里面,等下還要用。

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

下面,這個0x1,中的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,

實際需要分兩步:

想將其中的0x和逗號去掉;

復制到Excel中(需要將多余的空格換成Tab字符,才能將多個數值分別填到不同單元格中)。

按照上面的例子,需要:

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

替換為:1

自己領悟一下,哈哈!雕蟲小技,還有沒有別的?

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) { }

好像都很簡單啊,有沒難一點的啊!

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上用正則表達式,簡直會爽到飛起來……前提你要學會正則表達式各種語法。

這個就不裝逼了,以后慢慢玩。

責任編輯:lq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11033

    瀏覽量

    215972
  • C代碼
    +關注

    關注

    1

    文章

    90

    瀏覽量

    14672

原文標題:正則表達式裝逼(實用)指南

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    Cubeide1.18.1在線調試改變\"現場表達式\"中的值提示找不到地址怎么解決?

    Cubeide1.18.1在線調試時,在\"現場表達式\"中添加全局變量,然后改變其數值,Console窗口提示: Failed to read all registers
    發表于 04-27 06:18

    Linux中文本處理命令的用法

    Linux 三劍客是(grep,sed,awk)三者的簡稱,熟練使用這三個工具可以提升運維效率。Linux 三劍客以正則表達式作為基礎,而在Linux系統中,支持兩種正則表達式,分別為“標準正則表達式”和“擴展
    的頭像 發表于 04-15 10:22 ?212次閱讀
    Linux中文本處理命令的用法

    Linux grep命令詳解

    Linux grep命令是一種非常常用的文本搜索工具,它可以在給定的文件中搜索匹配的字符串,并輸出匹配的行。grep是全稱“global search regular expression print”,可以識別正則表達式,并使用正則表達式進行搜索。
    的頭像 發表于 12-25 09:39 ?746次閱讀

    表達式畫Coms電路,最近二周有比賽第一次接觸Cmos,主要用與或非門電路畫

    用與或非門電路繪畫,通過表達式,來繪畫cmos門電路
    發表于 12-04 16:02

    深入解析Django路由層:從基礎配置到高效設計的全攻略

    參數是正則表達式 只要第一個參數正則表達式能夠匹配到內容,那么就會立刻停止往下匹配 直接執行對應的視圖函數 在輸入url的時候默認加斜杠 django內部幫你做到重定向 一次匹配不行 url后面加斜杠
    的頭像 發表于 12-04 13:55 ?453次閱讀
    深入解析Django路由層:從基礎配置到高效設計的全攻略

    詳解nginx中的正則表達式

    前言,我這里驗證的nginx-v1.23.2單機環境下的nginx中的正則表達式、location路徑匹配規則和優先級。
    的頭像 發表于 12-03 09:59 ?765次閱讀
    詳解nginx中的<b class='flag-5'>正則表達式</b>

    Verilog表達式的位寬確定規則

    很多時候,Verilog中表達式的位寬都是被隱式確定的,即使你自己設計了位寬,它也是根據規則先確定位寬后,再擴展到你的設計位寬,這常常會導致結果產生意想不到的錯誤。
    的頭像 發表于 10-22 15:41 ?1355次閱讀
    Verilog<b class='flag-5'>表達式</b>的位寬確定規則

    通過工業智能網關實現中間變量表達式的快速配置

    ,出現告警可能是多個變量達到條件而觸發的,就需要對中間變量進行配置。 對此,物通博聯提供基于工業智能網關實現中間變量表達式的快速配置操作。用戶可以根據生產現場的應用需求,靈活配置中間變量表達式,實現多參數、多條件
    的頭像 發表于 10-08 17:10 ?563次閱讀
    通過工業智能網關實現中間變量<b class='flag-5'>表達式</b>的快速配置

    nginx中的正則表達式和location路徑匹配指南

    前言,我這里驗證的nginx-v1.23.2單機環境下的nginx中的正則表達式、location路徑匹配規則和優先級。
    的頭像 發表于 09-29 16:02 ?1577次閱讀
    nginx中的<b class='flag-5'>正則表達式</b>和location路徑匹配<b class='flag-5'>指南</b>

    求助,以下恒流源電路Io的計算表達式怎么計算?

    這個恒流源電路Io的計算表達式怎么計算,求給出詳細計算過程
    發表于 08-22 08:16

    TestStand表達式中常用的語法規則和運算符使用

    TestStand也有自己的語言嘛?在回答這個問題之前大家可以想一下在使用TestStand時有一個和語言密切相關的屬性。沒錯那就是表達式(Expressions),在這篇文章中,小編將以Q&A的方式來帶著大家來理解并熟悉TestStand表達式中較為常用的一些語法規則以
    的頭像 發表于 08-15 18:10 ?3075次閱讀
    TestStand<b class='flag-5'>表達式</b>中常用的語法規則和運算符使用

    Java表達式引擎選型調研分析

    1 簡介 我們項目組主要負責面向企業客戶的業務系統, 企業的需求往往是多樣化且復雜的,對接不同企業時會有不同的定制化的業務模型和流程。 我們在業務系統中 使用表達式引擎,集中配置管理業務規則,并實現
    的頭像 發表于 08-15 14:25 ?588次閱讀
    Java<b class='flag-5'>表達式</b>引擎選型調研分析

    鴻蒙原生應用元服務開發-倉頡基本概念表達式(二)

    三、do-while 表達式 do-while 表達式的基本形式為: do { 循環體 } while (條件) 其中“條件”是布爾類型表達式,“循環體”是一個代碼塊。do-while 表達式
    發表于 08-09 14:26

    鴻蒙原生應用元服務開發-倉頡基本概念表達式(一)

    在一些傳統編程語言中,一個表達式由一個或多個操作數(operand)通過零個或多個操作符(operator)組合而成,表達式總是隱含著一個計算過程,因此每個表達式都會有一個計算結果,對于只有操作數而
    發表于 08-08 10:27

    重啟一次VsCode后,ESP_LOGI會提示錯誤“應輸入表達式”的原因?

    我重啟一次vsc后,ESP_LOGI會提示錯誤“應輸入表達式”,不過build的時候沒有問題。是我C/Cpp配置哪里搞錯了嗎?
    發表于 06-17 08:22