案例:使用正則表達式中的正向預查和反向預查


需求如下:

從Excel表格里復制下來的數千行下列字符串如上,需要保存下“R20171028153620837”的字符,其余刪除。

最快捷的方法就將這一列值復制到notepad++中,使用正則表達式“R\d{17}”匹配到這一字符,怎么樣能得到匹配之外的結果而進行replace替換為空呢,那這樣就大工告成了。

然后就用到了正向預查:在子模式的內部前面添加"?="  正向預查的意思是,子模式僅僅作為條件限制,並不作為匹配結果輸出,子模式前面的。

例如:

收取定金¥1000元單號收款單R20171028184433953

匹配“R20171028184433953”前面的數字字母和漢字就用到了正向預查 .*(?=R\d{17})

然后將“R20171028184433953”匹配到的結果進行替換,替換為字符串為空。

接下來該處理“R20171028184433953”后邊有字符串字母和數字的了,用到了反向預查。

反向預查:在子模式的內部前面添加"?<="。反向預查與正向預查很相似,子模式僅僅作為條件限制,不作為結果輸出。唯一不同的是,正向預查匹配子模式前面的結果作為匹配結果,而反向預查匹配子模式后面的結果作為匹配結果。

R20171028164012754定金單號

匹配“R20171028164012754”前面的漢字就用到了反向預查 (?<=R\d{17}).*

使用上述正則就能匹配到“R20171028164012754”后邊相關的字符替換為空,即可。

總結:若想替換掉正則匹配結果的前面和后邊的字符為空,可分為將此字符串結合中間字符的正則進行正向預查和反向預查,查到前后字符進行替換為空即為索要的結果。

最后 我想說 正則表達式是強大的,你能通過它得到如何你想要的東西,且輕量化了工作內容,何樂而不為~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM