原文標(biāo)題:《這個(gè) Excel 新函數(shù),強(qiáng)大到不可思議!》
大家好,我是會一點(diǎn)數(shù)據(jù)處理的小爽~
前面我們講過正則函數(shù),了解到正則的插入、拆分用法。
之前都是利用正則匹配模式匹配字符,比如:
\d 匹配一個(gè)數(shù)字
\w 匹配一個(gè)數(shù)字字母下劃線,(在 ascii 模式下)
[a-c] 匹配一個(gè) a 到 c 之間的一個(gè)字符
但是有時(shí)會有一個(gè)特殊需求,匹配指定內(nèi)容之前或之后的位置。
比如 (小爽),我們要匹配括號里面的內(nèi)容,就可以通過匹配位置,進(jìn)而獲取內(nèi)容。
(位置小爽位置)
所以今天,就來講講正則的匹配位置。
1、開頭結(jié)尾限定
開頭結(jié)尾位置,也有對應(yīng)的正則語法。
^:用于匹配字符串的開頭,表示一個(gè)模式應(yīng)該出現(xiàn)在字符串的開頭位置。
$:在正則表達(dá)式中,表示匹配字符串的結(jié)尾位置。
正則表達(dá)式的「匹配」有兩種概念:一種是匹配字符,一種是匹配位置,這里的 ^,$ 就是匹配位置的。
利用 ^$ 我們可以判斷字符串開頭結(jié)尾是否存在某個(gè)字符串。
? 包含
如下圖所示,需要判斷字符串中是否包含小爽。
=REGEXTEST(A2,"小爽")
? 開頭
判斷開頭是否存在小爽。
=REGEXTEST(A2,"^小爽")
? 結(jié)尾
判斷結(jié)尾是否存在小爽。
=REGEXTEST(A2,"小爽$")
? 精確
字符串是否為小爽。
=REGEXTEST(A2,"^小爽$")
到這里,我們已經(jīng)學(xué)會了開頭結(jié)尾對應(yīng)的正則語法,接下來我們來看看指定內(nèi)容前后位置的正則語法。
2、指定內(nèi)容前后位置
如下圖所示,我們需要提取中括號里的信息:
傳統(tǒng)做法:
借助 TextSplit 拆分函數(shù)。
=TEXTSPLIT(A2{"【""】"}TRUE)
當(dāng)然也可以使用正則函數(shù),通過中括號取反來提取。
=REGEXEXTRACT(A2"[^【】]+"1)
不過,這里來介紹一種新的做法。
來看看我們的字符串,可以發(fā)現(xiàn),我們要提取的是中括號里的內(nèi)容。
【小爽】【爽鴨】【Excel】
如果不匹配字符,只匹配位置,那么位置之間的內(nèi)容,就是需要提取的內(nèi)容?!?位置) 內(nèi)容 (位置)】
問題來了?。。?/p>
在正則表達(dá)式中,有沒有只匹配位置的正則語法?
有的,那就是零寬斷言。
什么是零寬斷言?
正則表達(dá)式中的零寬斷言是一種特殊的結(jié)構(gòu),它在匹配的時(shí)候不會消耗字符,只是對匹配位置進(jìn)行條件判斷。
如同 ^ 代表開頭,$ 代表結(jié)尾,零寬斷言也有類似的作用,它們只匹配某些位置,在匹配過程中,不占用字符,所以被稱為 "零寬"。
主要有以下四個(gè):
(?=pattern) 零寬正向先行斷言
(?<=pattern) 零寬正向后行斷言
(?!pattern) 零寬負(fù)向先行斷言
(?零寬負(fù)向后行斷言
看起來好復(fù)雜?
看個(gè)例子你就懂了!
字符串:?小爽 ω
正則語法:(?<=?) 小爽 (?=ω)
(?<=?) 小爽左邊為?的位置。
巧記 (?<=):正則中有個(gè)左邊的小于號。也就是查找小爽左邊為?的位置。
(?=ω) 小爽右邊為 ω 的位置。
巧記 (?=):沒有小于號,也就是查找小爽右邊為 ω 的位置。
返回結(jié)果:小爽
知道了零寬斷言,那我們再來看公式,就不難理解:
=REGEXEXTRACT(A2,"(?<=【).+?(?=】)",1)
【位置小爽位置】【位置爽鴨位置】【位置 excel 位置】
公式解析:
(?<=【).+?(?=】)
(?<=【):指定內(nèi)容左邊為【的位置。
.+?:匹配指定內(nèi)容,.+ 代表除換行符之外一到多個(gè)字符,?代表非貪婪匹配。
(?=】):指定內(nèi)容右邊為】的位置。
何為非貪婪匹配?
貪婪匹配是指匹配時(shí),盡可能多地去匹配字符的方式。
非貪婪匹配是指匹配時(shí),盡可能少地去匹配字符的方式。
假如我們?nèi)サ??號,就是貪婪匹配,它會盡可能多的匹配,就會匹配到結(jié)尾。
3、最后的話
敲黑板:
本文中,小爽主要帶領(lǐng)大家了解正則表達(dá)式中比較難的匹配位置。
其中,我們了解到:
^:匹配開頭位置
$:匹配結(jié)尾位置
零寬斷言:條件位置匹配 (?<=,?=)
非貪婪模式:?盡可能少的匹配
文章比較難,但是掌握了匹配字符和位置,就相當(dāng)于掌握了正則語法。
正則表達(dá)式是匹配模式,要么匹配字符,要么匹配位置。
關(guān)于匹配字符的文章大家可以戳:
本文來自微信公眾號:秋葉 Excel (ID:excel100),作者:小爽
廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。