精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

    文章

    10826

    瀏覽量

    211160
  • C代碼
    +關注

    關注

    1

    文章

    89

    瀏覽量

    14287

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

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

收藏 人收藏

    評論

    相關推薦

    Verilog表達式的位寬確定規則

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

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

    前言,我這里驗證的nginx-v1.23.2單機環境下的nginx中的正則表達式、location路徑匹配規則和優先級。
    的頭像 發表于 09-29 16:02 ?481次閱讀
    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 ?1115次閱讀
    TestStand<b class='flag-5'>表達式</b>中常用的語法規則和運算符使用

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

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

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

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

    求助,有關表達式選項卡(ADS)的問題求解

    你好。 我看不到表達式選項卡中的某些變量值。 數組的大小顯然是 256,但我最多只能看到 100。 請問問題出在哪里? 謝謝。
    發表于 06-03 06:23

    mapgis屬性篩選表達式

    篇文章中,我們將詳細討論MapGIS的屬性篩選表達式,包括語法、操作符和函數等。 屬性篩選表達式是一種在MapGIS中用于指定要素選擇條件的代碼。它由一組操作符、函數和屬性字段組成,用于描述要篩選的要素的特征。在MapGIS中,屬性篩選
    的頭像 發表于 02-25 10:58 ?1475次閱讀

    西門子博途的算術表達式

    算術表達式既可以是一個數字值,也可以是由帶有算術運算符的兩個值或表達式組合而成。 算術運算符可以處理當前 CPU 所支持的各種數據類型。如果在該運算中有 2 個操作數,那么可根據以下條件來確定結果的數據類型。
    的頭像 發表于 01-24 11:36 ?949次閱讀

    你還不會gvim正則表達式?一文搞懂!

    gvim正則表達式常在命令行模式下使用,一般用于文本文件字符串的替換、刪除等操作。
    的頭像 發表于 01-19 16:47 ?1092次閱讀

    更快的tsv解析代碼分享

    使用正則解析的正則表達式很簡單, 這里直接給代碼, 為了避免重復編譯正則表達式和重新分配內存報錯結果列表, 這里將她們作為參數傳給解析函數.
    的頭像 發表于 12-29 09:45 ?406次閱讀
    更快的tsv解析代碼分享

    GVIM正則表達式介紹和使用示例

    的Ken Thompson借用這個概念并將它應用到了文本編輯器中。后面正則表達式的說法進入到了大家常用的vi、vim、gvim當中。
    的頭像 發表于 12-18 15:09 ?1179次閱讀
    GVIM<b class='flag-5'>正則表達式</b>介紹和使用示例

    一文詳解Java表達式引擎選型

    AviatorScript 是一門高性能、輕量級寄宿于 JVM 之上的腳本語言。AviatorScript 可將表達式編譯成字節碼。它原來的定位一直只是一個表達式引擎,不支持 if/else 條件
    的頭像 發表于 12-06 10:57 ?1817次閱讀
    一文詳解Java<b class='flag-5'>表達式</b>引擎選型

    如何從一個簡單的數學表達式創建一個Saber模型?

    如何從一個簡單的數學表達式創建一個Saber模型,將你的輸出描述為輸入的函數?例如 out=a*in*in+b (其中 a 和 b 是常數)。
    的頭像 發表于 12-05 13:42 ?689次閱讀
    如何從一個簡單的數學<b class='flag-5'>表達式</b>創建一個Saber模型?

    SIMATIC S7-1500 PLC S7-SCL表達式詳解

    表達式為了計算一個終值所用的公式,它由地址(變量)和運算符組成。表達式的規則如下。
    的頭像 發表于 11-28 09:36 ?1064次閱讀
    SIMATIC S7-1500 PLC S7-SCL<b class='flag-5'>表達式</b>詳解