Excel 正則表達(dá)式的位置匹配

[日期:2024-11-26] 作者:小爽 次瀏覽 [字體: ]

Excel 正則表達(dá)式的位置匹配

秋葉Excel 2024/11/3 11:45:10 責(zé)編:夢澤評論:0

原文標(biāo)題:《這個(gè) Excel 新函數(shù),強(qiáng)大到不可思議!》


大家好,我是會(huì)一點(diǎn)數(shù)據(jù)處理的小爽~


前面我們講過正則函數(shù),了解到正則的插入、拆分用法。


之前都是利用正則匹配模式匹配字符,比如:


\d 匹配一個(gè)數(shù)字


\w 匹配一個(gè)數(shù)字字母下劃線,(在 ascii 模式下)


[a-c] 匹配一個(gè) a 到 c 之間的一個(gè)字符


但是有時(shí)會(huì)有一個(gè)特殊需求,匹配指定內(nèi)容之前或之后的位置。


比如 (小爽),我們要匹配括號里面的內(nèi)容,就可以通過匹配位置,進(jìn)而獲取內(nèi)容。


(位置小爽位置)


Excel 正則表達(dá)式的位置匹配


所以今天,就來講講正則的匹配位置。


1、開頭結(jié)尾限定

開頭結(jié)尾位置,也有對應(yīng)的正則語法。


^:用于匹配字符串的開頭,表示一個(gè)模式應(yīng)該出現(xiàn)在字符串的開頭位置。


$:在正則表達(dá)式中,表示匹配字符串的結(jié)尾位置。


正則表達(dá)式的「匹配」有兩種概念:一種是匹配字符,一種是匹配位置,這里的 ^,$ 就是匹配位置的。


利用 ^$ 我們可以判斷字符串開頭結(jié)尾是否存在某個(gè)字符串。


? 包含


如下圖所示,需要判斷字符串中是否包含小爽。


=REGEXTEST(A2,"小爽")

Excel 正則表達(dá)式的位置匹配


? 開頭


判斷開頭是否存在小爽。


=REGEXTEST(A2,"^小爽")

Excel 正則表達(dá)式的位置匹配


? 結(jié)尾


判斷結(jié)尾是否存在小爽。


=REGEXTEST(A2,"小爽$")

Excel 正則表達(dá)式的位置匹配


? 精確


字符串是否為小爽。


=REGEXTEST(A2,"^小爽$")

Excel 正則表達(dá)式的位置匹配


到這里,我們已經(jīng)學(xué)會(huì)了開頭結(jié)尾對應(yīng)的正則語法,接下來我們來看看指定內(nèi)容前后位置的正則語法。


2、指定內(nèi)容前后位置

如下圖所示,我們需要提取中括號里的信息:


Excel 正則表達(dá)式的位置匹配


傳統(tǒng)做法:


借助 TextSplit 拆分函數(shù)。


=TEXTSPLIT(A2{"【""】"}TRUE)

Excel 正則表達(dá)式的位置匹配


當(dāng)然也可以使用正則函數(shù),通過中括號取反來提取。


=REGEXEXTRACT(A2"[^【】]+"1)

Excel 正則表達(dá)式的位置匹配


不過,這里來介紹一種新的做法。


來看看我們的字符串,可以發(fā)現(xiàn),我們要提取的是中括號里的內(nèi)容。


【小爽】【爽鴨】【Excel】


如果不匹配字符,只匹配位置,那么位置之間的內(nèi)容,就是需要提取的內(nèi)容?!?位置) 內(nèi)容 (位置)】


問題來了?。?!


在正則表達(dá)式中,有沒有只匹配位置的正則語法?


有的,那就是零寬斷言。


什么是零寬斷言?


正則表達(dá)式中的零寬斷言是一種特殊的結(jié)構(gòu),它在匹配的時(shí)候不會(huì)消耗字符,只是對匹配位置進(jìn)行條件判斷。


如同 ^ 代表開頭,$ 代表結(jié)尾,零寬斷言也有類似的作用,它們只匹配某些位置,在匹配過程中,不占用字符,所以被稱為 "零寬"。


主要有以下四個(gè):


(?=pattern) 零寬正向先行斷言


(?<=pattern) 零寬正向后行斷言


(?!pattern) 零寬負(fù)向先行斷言


(?零寬負(fù)向后行斷言


看起來好復(fù)雜?


看個(gè)例子你就懂了!


字符串:?小爽 ω


正則語法:(?<=?) 小爽 (?=ω)


(?<=?) 小爽左邊為?的位置。


巧記 (?<=):正則中有個(gè)左邊的小于號。也就是查找小爽左邊為?的位置。


(?=ω) 小爽右邊為 ω 的位置。


巧記 (?=):沒有小于號,也就是查找小爽右邊為 ω 的位置。


返回結(jié)果:小爽


Excel 正則表達(dá)式的位置匹配


知道了零寬斷言,那我們再來看公式,就不難理解:


=REGEXEXTRACT(A2,"(?<=【).+?(?=】)",1)

Excel 正則表達(dá)式的位置匹配


【位置小爽位置】【位置爽鴨位置】【位置 excel 位置】


公式解析:


(?<=【).+?(?=】)


(?<=【):指定內(nèi)容左邊為【的位置。


.+?:匹配指定內(nèi)容,.+ 代表除換行符之外一到多個(gè)字符,?代表非貪婪匹配。


(?=】):指定內(nèi)容右邊為】的位置。


何為非貪婪匹配?


貪婪匹配是指匹配時(shí),盡可能多地去匹配字符的方式。


非貪婪匹配是指匹配時(shí),盡可能少地去匹配字符的方式。


假如我們?nèi)サ??號,就是貪婪匹配,它?huì)盡可能多的匹配,就會(huì)匹配到結(jié)尾。


Excel 正則表達(dá)式的位置匹配


3、最后的話

敲黑板:


Excel 正則表達(dá)式的位置匹配


本文中,小爽主要帶領(lǐng)大家了解正則表達(dá)式中比較難的匹配位置。


其中,我們了解到:


^:匹配開頭位置


$:匹配結(jié)尾位置


零寬斷言:條件位置匹配 (?<=,?=)


非貪婪模式:?盡可能少的匹配


文章比較難,但是掌握了匹配字符和位置,就相當(dāng)于掌握了正則語法。


正則表達(dá)式是匹配模式,要么匹配字符,要么匹配位置。


關(guān)于匹配字符的文章大家可以戳:


WPS 中的正則


Excel 中的正則


本文來自微信公眾號:秋葉 Excel (ID:excel100),作者:小爽