需求如下:
從Excel表格里復制下來的數千行下列字符串如上,需要保存下“R20171028153620837”的字符,其余刪除。
最快捷的方法就將這一列值復制到notepad++中,使用正則表達式“R\d{17}”匹配到這一字符,怎么樣能得到匹配之外的結果而進行replace替換為空呢,那這樣就大工告成了。
然后就用到了正向預查:在子模式的內部前面添加"?=" 正向預查的意思是,子模式僅僅作為條件限制,並不作為匹配結果輸出,子模式前面的。
例如:
收取定金¥1000元單號收款單R20171028184433953
匹配“R20171028184433953”前面的數字字母和漢字就用到了正向預查 .*(?=R\d{17})
然后將“R20171028184433953”匹配到的結果進行替換,替換為字符串為空。
接下來該處理“R20171028184433953”后邊有字符串字母和數字的了,用到了反向預查。
反向預查:在子模式的內部前面添加"?<="。反向預查與正向預查很相似,子模式僅僅作為條件限制,不作為結果輸出。唯一不同的是,正向預查匹配子模式前面的結果作為匹配結果,而反向預查匹配子模式后面的結果作為匹配結果。
R20171028164012754定金單號
匹配“R20171028164012754”前面的漢字就用到了反向預查 (?<=R\d{17}).*
使用上述正則就能匹配到“R20171028164012754”后邊相關的字符替換為空,即可。
總結:若想替換掉正則匹配結果的前面和后邊的字符為空,可分為將此字符串結合中間字符的正則進行正向預查和反向預查,查到前后字符進行替換為空即為索要的結果。
最后 我想說 正則表達式是強大的,你能通過它得到如何你想要的東西,且輕量化了工作內容,何樂而不為~