chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

正則表達(dá)式實(shí)用指南

Q4MP_gh_c472c21 ? 來(lái)源:嵌入式軟件實(shí)戰(zhàn)派 ? 作者:實(shí)戰(zhàn)派小師弟 ? 2020-11-16 15:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

正則表達(dá)式(Regular Expression,或者Regex),能干嘛?聽(tīng)說(shuō)很強(qiáng)悍,很多人用來(lái)查找字符串,或者替換某些字符串。

實(shí)際上,正則表達(dá)式有四個(gè)功能:

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

替換,按某種規(guī)則替換內(nèi)容

分割,將文本內(nèi)容按某種規(guī)則分割開(kāi)來(lái)

檢驗(yàn),檢驗(yàn)?zāi)澄谋臼欠穹弦?guī)則

如果沒(méi)玩過(guò)正則表達(dá)式,也看不出這四個(gè)功能到底能干嘛。

我剛學(xué)那陣,覺(jué)得這東西,玩點(diǎn)小兒科的東西還行,能干大事?

后來(lái),越用越多,發(fā)現(xiàn)這貨在你遇到困境的時(shí)候可以力挽千鈞。

話(huà)說(shuō)回來(lái),這個(gè)東西能裝逼嗎?

1. 你女朋友喊你查她的號(hào)碼

你女朋友(假如你有)有一天跟你撒嬌,她給你一個(gè)txt文檔,里面存著一個(gè)她的號(hào)碼,讓你把她的號(hào)碼找出來(lái)。此時(shí),你不記得她的完整號(hào)碼了,如果找不出來(lái),晚上就得跪CPU了。剎那間,你想到了,她的號(hào)碼有這樣的數(shù)字……771……55(親親你……嗯嗯)。于是你,快速用Notepad++打開(kāi)含有一堆亂七八糟電話(huà)號(hào)碼的文本。查找輸入:1d+771d+55,然后回車(chē),Bingo!不信,你試試:

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

好吧,故事是虛構(gòu)的,也別幻想你女朋友真的讓你查號(hào)碼了。

簡(jiǎn)單解釋一下,這里面的d就是表示digital的意思即0-9都可以用d來(lái)描述,而d+就表示有多個(gè)數(shù)字。這個(gè)是正則表達(dá)式中非常簡(jiǎn)單的應(yīng)用了。

2. 查找文件中某字符串內(nèi)容

模糊搜索到底怎么搞的,你有想過(guò)么?要不先來(lái)玩下這個(gè),好像有種“萬(wàn)軍之中取人頭顱如探囊取物”感覺(jué)。

例如,你要查找AUTOSAR代碼中Os Timer相關(guān)的某些函數(shù),這些函數(shù)有些特征,帶有Os_和Pit的字符,那么你可以用linux上的grep命令或者用vscode的正則表達(dá)式功能Os_w+Pitw+來(lái)查找。

上面這個(gè)w就是匹配word的意思。其實(shí),原理跟上一個(gè)例子類(lèi)似,原理很簡(jiǎn)單。

實(shí)際上,“匹配或者查找”是正則表達(dá)式最基本的功能了。

3. 爬取和解析一些不可描述的內(nèi)容

正則表達(dá)式還能不能干點(diǎn)刺激的事情呢?

我有個(gè)朋友(別問(wèn)我朋友是誰(shuí),有沒(méi)有他的聯(lián)系方式……)。他為了下載某些小視頻,硬生生地學(xué)會(huì)了爬蟲(chóng),然后,下載了一堆封面圖片和一些不可描述的文字描述,還有BT種子,我問(wèn)他有多少,他說(shuō)1TB的硬盤(pán)快滿(mǎn)了……

我問(wèn)他是怎么做到的,他說(shuō)他用了BeautifulSoup庫(kù)來(lái)爬的,傻瓜式的,很簡(jiǎn)單,大有要傳授我這些秘技的樣子。他還按番號(hào)做了分類(lèi),每一類(lèi)番號(hào),還生成一個(gè)markdown文本,其中用的最多的就是Regex,例如某類(lèi)番號(hào)可以用ABC-d+篩選出來(lái)。

搞完后,他“握草”了好幾次,驚嘆這個(gè)小小的島國(guó),怎么可以拍這么多這些不可描述的小視頻,而且還……(此處省略255個(gè)字)

我很好奇,這個(gè)爬蟲(chóng)這么好玩?我專(zhuān)門(mén)研究了下這個(gè)爬蟲(chóng)神器BeautifulSoup,其中很多方法是支持正則表達(dá)式的,如re.compile('[a-z]+-[0-9]+',re.I).findall(str_temp)。用起來(lái)簡(jiǎn)直是如虎添翼……

玩歸玩,正則表達(dá)式在我眼里應(yīng)該多干些正經(jīng)事的。

4. 批量格式化處理

我有一堆16進(jìn)制數(shù),我想用到C代碼里面,例如將下面的內(nèi)容加上0x和逗號(hào),怎么搞?

01234567 89ABCDEF 1011121314151617 18191A1B1C1D1E1F 2021222324252627 28292A2B2C2D2E2F

作為一個(gè)很懶的程序員,我肯定不會(huì)一個(gè)個(gè)添加的。試試這個(gè):

查找目標(biāo):(w+)[s! ]

替換為:0x1,

(w+)就是那一個(gè)個(gè)十六進(jìn)制數(shù),這個(gè)括號(hào)的作用,就先記錄一下,把它放一個(gè)分組里面,等下還要用。

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

下面,這個(gè)0x1,中的1就是上面查到的分組的內(nèi)容。

5. 將數(shù)據(jù)格式化后復(fù)制到Excel

上面的例子有點(diǎn)啰嗦了,看個(gè)簡(jiǎn)單的,有以下數(shù)據(jù),想將其中的0x和逗號(hào)去掉,并復(fù)制到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,

實(shí)際需要分兩步:

想將其中的0x和逗號(hào)去掉;

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

按照上面的例子,需要:

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

替換為:1

自己領(lǐng)悟一下,哈哈!雕蟲(chóng)小技,還有沒(méi)有別的?

6. 代碼生成與格式化

現(xiàn)有播放器很多個(gè)命令,我想將其生成對(duì)應(yīng)的函數(shù),怎么辦?

命令:

play pause stop prev next fastforward fastrewind ……

函數(shù):

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

一個(gè)個(gè)手動(dòng)敲進(jìn)去?我這么懶,才不呢。

試試這個(gè):

查找目標(biāo):^(w+)$

替換為:BOOL player_1_cmd_func(void* p) { }

好像都很簡(jiǎn)單啊,有沒(méi)難一點(diǎn)的??!

7. 刪除不含某些信息的的內(nèi)容

匹配查找包含某些信息的內(nèi)容倒是容易,怎么匹配不包含的內(nèi)容???

例如,我想刪掉不是.mid后綴的內(nèi)容,怎么搞?

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

試試這個(gè):

查找目標(biāo):^((?!(2009.*.mid$)).)*$

替換為:

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

7. 搭上腳本語(yǔ)言的快車(chē)

Python、Ruby、Perl、JavaScript上用正則表達(dá)式,簡(jiǎn)直會(huì)爽到飛起來(lái)……前提你要學(xué)會(huì)正則表達(dá)式各種語(yǔ)法。

這個(gè)就不裝逼了,以后慢慢玩。

責(zé)任編輯:lq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11331

    瀏覽量

    225904
  • C代碼
    +關(guān)注

    關(guān)注

    1

    文章

    90

    瀏覽量

    15237

原文標(biāo)題:正則表達(dá)式裝逼(實(shí)用)指南

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    條件的執(zhí)行語(yǔ)句

    條件執(zhí)行語(yǔ)句大多在if語(yǔ)句中使用,也在使用關(guān)系運(yùn)算符(<,==,>等) 或者布爾值表達(dá)式(,!等)計(jì)算復(fù)雜表達(dá)式時(shí)使用。對(duì)于包含函數(shù)調(diào) 用的代碼片段,由于函數(shù)返回值會(huì)被
    發(fā)表于 12-12 08:25

    布爾表達(dá)式及范圍檢查

    一個(gè)常用的布爾表達(dá)式是用于判斷變量是否位于某個(gè)范圍內(nèi), 例如,檢查一個(gè)圖形坐標(biāo)是否位于一個(gè)窗口內(nèi): bool PointInRectangelArea (Point p, Rectangle
    發(fā)表于 12-12 07:08

    布爾表達(dá)式和零值比較處理

    處理器的標(biāo)志位在比較指令操作后被設(shè)置。標(biāo)志位同樣可以被諸如MOV、ADD、AND、MUL等 基本算術(shù)和裸機(jī)指令改寫(xiě)。如果數(shù)據(jù)指令設(shè)置了標(biāo)志位,N和Z標(biāo)志位也將與結(jié)果與0比較一樣 進(jìn)行設(shè)置。N標(biāo)志表示結(jié)果是否是負(fù)值,Z標(biāo)志表示結(jié)果是否是0。 C語(yǔ)言中,處理器中的N和Z標(biāo)志位與下面的指令聯(lián)系在一起:有符號(hào)關(guān)系運(yùn) 算x<0,x>=0,x==0,x!=0;無(wú)符號(hào)關(guān)系運(yùn)算x==0,x!=0(或者x>0)。 C代碼中每次關(guān)系運(yùn)算符的調(diào)用,編譯器都會(huì)發(fā)出一個(gè)比較指令。 如果操作符是上面提到的,編譯器便會(huì)優(yōu)化掉比較指令。例如: int aFunction(int x, int y) { if (x + y < 0) return 1; else return 0; } 盡可能的使用上面的判斷方式,這可以在關(guān)鍵循環(huán)中減少比較指令的調(diào)用, 進(jìn)而減少代碼體積并提高代碼性能。C語(yǔ)言沒(méi)有借位和溢出位的概念,因此, 如果不借助匯編,不可能直接使用借位標(biāo)志C和溢出位標(biāo)志V。但編譯器支 持借位(無(wú)符號(hào)溢出),例如: int sum(int x, int y) { int res; res = x + y; if ((unsigned) res < (unsigned) x) // carry set?// res++; return res; }
    發(fā)表于 12-12 06:16

    C語(yǔ)言的分支結(jié)構(gòu)介紹

    1.簡(jiǎn)單if語(yǔ)句 C語(yǔ)言中的分支結(jié)構(gòu)語(yǔ)句中的if條件語(yǔ)句。 簡(jiǎn)單if語(yǔ)句的基本結(jié)構(gòu)如下: 代碼語(yǔ)言:javascript if(表達(dá)式) { 執(zhí)行代碼塊; } 其語(yǔ)義是:如果表達(dá)式的值為真,則執(zhí)行其后的語(yǔ)句,否則不執(zhí)行該語(yǔ)句。 注意:if()后面沒(méi)有分號(hào),直
    發(fā)表于 11-25 07:48

    C語(yǔ)言強(qiáng)制類(lèi)型轉(zhuǎn)換

    強(qiáng)制類(lèi)型轉(zhuǎn)換是通過(guò)定義類(lèi)型轉(zhuǎn)換運(yùn)算來(lái)實(shí)現(xiàn)的。其一般形式為: (數(shù)據(jù)類(lèi)型) (表達(dá)式) 其作用是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類(lèi)型說(shuō)明符所表示的類(lèi)型 在使用強(qiáng)制轉(zhuǎn)換時(shí)應(yīng)注意以下問(wèn)題: 數(shù)據(jù)類(lèi)型
    發(fā)表于 11-24 06:32

    第4章 C語(yǔ)言基礎(chǔ)以及流水燈的實(shí)現(xiàn)(4.5 4.6)

    (表達(dá)式) ? ? ? ?{ ? ? ? ? ? ?循環(huán)體語(yǔ)句; ? ? ? ?} 在C語(yǔ)言里,通?!?b class='flag-5'>表達(dá)式”符合條件叫做真,不符合條件,叫做假。比如前邊i while(表達(dá)式)這個(gè)括號(hào)里的
    的頭像 發(fā)表于 11-06 11:21 ?519次閱讀

    inline ASM(內(nèi)聯(lián)匯編)的細(xì)節(jié)分享

    內(nèi)聯(lián)匯編,否則,仍然是帶有C++表達(dá)式的內(nèi)聯(lián)江編,此時(shí)\"instructionlist\"中的寄存器的寫(xiě)法需要遵守相關(guān)的規(guī)定: 寄存器前必須使用兩個(gè)百分號(hào)(%%),而不是像
    發(fā)表于 10-31 09:11

    I1電流計(jì)算對(duì)不對(duì)?怎么推導(dǎo)不出來(lái)I1的表達(dá)式是圖中那樣

    I1電流計(jì)算對(duì)不對(duì)?怎么推導(dǎo)不出來(lái)I1的表達(dá)式是圖中那樣
    發(fā)表于 09-28 18:01

    labview如何使用VISA串口資源查找的正則表達(dá)式提取串口的資源名稱(chēng)?

    如圖,如何利用VISA資源查找的正則表達(dá)式從很多串口當(dāng)中提取想要的目標(biāo)串口(Quectel USB AT Port這個(gè)串口)?
    發(fā)表于 07-07 17:20

    基礎(chǔ)篇3:掌握Python中的條件語(yǔ)句與循環(huán)

    不同的條件執(zhí)行不同的代碼塊。Python中的條件語(yǔ)句主要使用if、elif(else if的縮寫(xiě))和else關(guān)鍵字。 if語(yǔ)句 最簡(jiǎn)單的條件語(yǔ)句是if語(yǔ)句,它的工作方式如下: 復(fù)制代碼 if 條件表達(dá)式
    發(fā)表于 07-03 16:13

    Cubeide1.18.1在線調(diào)試改變\"現(xiàn)場(chǎng)表達(dá)式\"中的值提示找不到地址,為什么?

    Cubeide1.18.1在線調(diào)試時(shí),在\"現(xiàn)場(chǎng)表達(dá)式\"中添加全局變量,然后改變其數(shù)值,Console窗口提示: Failed to read all registers
    發(fā)表于 06-12 06:50

    《ESP32S3 Arduino開(kāi)發(fā)指南》第三章 C/C++語(yǔ)言基礎(chǔ)

    基礎(chǔ),由于篇幅有限,在此僅對(duì)C/C++語(yǔ)言基礎(chǔ)進(jìn)行簡(jiǎn)單介紹。本章將分為如下9個(gè)小節(jié):3.1 數(shù)據(jù)類(lèi)型3.2 運(yùn)算符3.3 表達(dá)式3.4 數(shù)組3.5 字符串3.6 注釋3.7 順序結(jié)構(gòu)3.8 選擇結(jié)構(gòu)
    發(fā)表于 06-10 09:20

    Cubeide1.18.1在線調(diào)試改變\"現(xiàn)場(chǎng)表達(dá)式\"中的值提示找不到地址是怎么回事?

    Cubeide1.18.1在線調(diào)試時(shí),在\"現(xiàn)場(chǎng)表達(dá)式\"中添加全局變量,然后改變其數(shù)值,Console窗口提示: Failed to read all registers
    發(fā)表于 06-10 08:26

    干貨分享 | 零基礎(chǔ)上手!TSMaster圖形信號(hào)表達(dá)式實(shí)操指南

    TSMaster軟件支持在圖形里面的信號(hào)表達(dá)式功能,主要用于多信號(hào)表達(dá)式運(yùn)算和顯示的場(chǎng)景。本文將以A2L中的標(biāo)定變量為例,介紹如何使用圖形中的信號(hào)表達(dá)式功能進(jìn)行多信號(hào)的后處理運(yùn)算和顯示。本文關(guān)鍵詞
    的頭像 發(fā)表于 06-06 20:03 ?1025次閱讀
    干貨分享 | 零基礎(chǔ)上手!TSMaster圖形信號(hào)<b class='flag-5'>表達(dá)式</b>實(shí)操<b class='flag-5'>指南</b>

    Cubeide1.18.1在線調(diào)試改變\"現(xiàn)場(chǎng)表達(dá)式\"中的值提示找不到地址,怎么解決?

    Cubeide1.18.1在線調(diào)試時(shí),在\"現(xiàn)場(chǎng)表達(dá)式\"中添加全局變量,然后改變其數(shù)值,Console窗口提示: Failed to read all registers
    發(fā)表于 06-06 08:27