設(shè)置
  • 日夜間
    隨系統(tǒng)
    淺色
    深色
  • 主題色

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

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

原文標(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)于匹配字符的文章大家可以戳:

WPS 中的正則

Excel 中的正則

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

廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。

相關(guān)文章

關(guān)鍵詞:Excel教程,Excel學(xué)院

軟媒旗下網(wǎng)站: IT之家 最會買 - 返利返現(xiàn)優(yōu)惠券 iPhone之家 Win7之家 Win10之家 Win11之家

軟媒旗下軟件: 軟媒手機(jī)APP應(yīng)用 魔方 最會買 要知