[正則表達式]利用正則表達式獲取兩者之間的內容

起因是同學找我問怎么用正則表達式獲得——比如說12.3億元中的“億”,3千萬元的“千萬”。然后我試了很久,直接用在線測試工具測的,發(fā)現(xiàn)零寬斷言里的(?<=exp)一直不起作用……后來發(fā)現(xiàn)應該是js不支持這個……還好他用的是python我就直接用python試了發(fā)現(xiàn)是支持的TUT而且我并不會python完全是百度了命令硬來。
一般來說大家平時用正則表達式都是得到帶有匹配內容的結果(描述的有點亂),比如說other?content!other 用\?(.*?)! 匹配的結果就是 ?content! 是帶有"?!"的。如果我想只得到content那應該怎么寫呢? 那就要用到零寬斷言里的(?<=exp)(?=exp)
關于(?<=exp)(?=exp)的介紹如下:

(?=pattern)
正向預查,在任何匹配 pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。預查不消耗字符,也就是說,在一個匹配發(fā)生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始。

(?<=exp),也叫零寬度正回顧后發(fā)斷言
格式:(?<=pattern2)pattern1
匹配這樣的字符串
a)字符串本身匹配pattern1
b)字符串前面的內容匹配pattern2

如果概括的去理解(不一定完全符合原理),就是content(?=pattern)就是得到符合后面跟著pattern的content,(?<=pattern2)content 就是得到前面跟著pattern2的content。兩個一起用的話就匹配到那些前面符合pattern2后面跟著pattern的content。感覺是在繞口令orz。想要弄得更清楚可能要去研究下正則引擎的匹配行為。

于是我們得到正則表達式

(?<=\?)[\s\S]*(?=\!)

<code>[\s\S]*</code>匹配任意內容,<code>(?<=?)</code>表示前面是問號,<code>(?=!)</code>表示后面是感嘆號。

下面這個是獲得12.3億元中的“億”,3千萬元的“千萬”的正則表達式。

(?<=[0-9])[\u4e00-\u9fa5]+?(?=\u5143)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容