今天我們來(lái)介紹正則表達(dá)式函數(shù)REGEXP。 這個(gè)函數(shù)非常好用。有了它,很多文本函數(shù)都可以不用了。
在介紹它之前,我們一起來(lái)學(xué)習(xí)一下正則表達(dá)式的基礎(chǔ)知識(shí)。
正則表達(dá)式基礎(chǔ)知識(shí) 正則表達(dá)式就是用一些特殊的字符來(lái)表達(dá)或總結(jié)字符串的規(guī)律或特性。比如 用\d或[0-9]表示數(shù)字,那么\d{11}就表示11位的整數(shù)。 操作符 | 含義 | 示例 | . | 小數(shù)點(diǎn),表示任何單個(gè)字符 |
| [] | 中括號(hào)表示字符集,對(duì)單個(gè)字符給出取值范圍 | [abc]表示a或b或c,[a-z]表示a-z單個(gè)字符(任意一位小寫字母) [0-9]表示單個(gè)任意數(shù)字 | [^] | 非字符集。對(duì)單個(gè)字符給出排除范圍 | [^abc]表示非a或非b或非c的單個(gè)字符 | * | 星號(hào)表示前一個(gè)元素的0次或者無(wú)限次的擴(kuò)展 | abc*表示ab、abc、abcc、abcccc等等(匹配 ab) | + | 前一個(gè)元素的1次或者無(wú)限次的擴(kuò)展 | abc+表示 abc、abccc、abcc、abccccc等(不匹配 ab) | ? | 前一個(gè)元素的0次或者1次擴(kuò)展 | abc?僅表示 ab、abc。 可以把“4th|4”簡(jiǎn)化為“4(th)?”。我們看到“?”作用的元素是整個(gè)括號(hào)了 | | | 左右表達(dá)式中的任意一個(gè)。左右表達(dá)式可以是多字符。注意與[ ]的區(qū)別 | abc|def表示abc、def | {m} | 擴(kuò)展前一個(gè)字符m次 | ab{2}c表示abbc | {m,n} | 擴(kuò)展前一個(gè)字符m至n次(含m和n次) | ab{1,2}c匹配abc、abbc | ^ | 匹配字符串開(kāi)頭 | ^abc表示abc在一個(gè)字符串的開(kāi)頭,即不匹配 aabc | $ | 匹配字符串結(jié)尾 | abc$表示abc在一個(gè)字符串的結(jié)尾,即不匹配abcd | () | 分組標(biāo)記內(nèi)部只能使用|操作符 | (abc)表示abc ,(abc|def)表示abc、def | \d | 一位數(shù)字,等價(jià)于[0-9] |
| \w | 組成單詞的字符,等價(jià)于[A-Za-z0-9_] | 表示字符小寫大寫的a-z和數(shù)字0-9以及下劃線_ |
下面我們來(lái)看一下REGEXP函數(shù)的基本語(yǔ)法及應(yīng)用案例 REGEXP語(yǔ)法
=REGEXP ( 字符串,正則表達(dá)式,匹配模式,替換內(nèi)容 ) 第三參數(shù)的匹配模式有三種:0提取、1判斷、2替換 提取字符串中的數(shù)字 正則表達(dá)式解釋:
[0-9] :匹配任意一個(gè)數(shù)字字符,從0到9。
. :匹配小數(shù)點(diǎn)字符。在正則表達(dá)式中,點(diǎn)是一個(gè)特殊字符,表示匹配除了換行符之外的任意單個(gè)字符。但在這里,由于它被放在了方括號(hào)內(nèi),它失去了特殊含義,只表示匹配字面量的點(diǎn)字符。
- :匹配短橫線字符。同樣,在方括號(hào)內(nèi),短橫線只是一個(gè)普通字符,不表示范圍。
[0-9.-] :方括號(hào)表示一個(gè)字符集,該集合包含數(shù)字0到9、點(diǎn)字符和短橫線字符。匹配時(shí),它會(huì)嘗試匹配這個(gè)集合中的任意一個(gè)字符。
+ :表示匹配前面的字符集一次或多次。因此,[0-9.-]+ 會(huì)匹配一個(gè)或多個(gè)連續(xù)的數(shù)字、點(diǎn)或短橫線字符。
如果字符串中有多個(gè)數(shù)字,在最外圍套一個(gè)SUM函數(shù),就能求和 =SUM(--REGEXP(A5,"[0-9.-]+")) 拆分中英混合的字符串 提取中文的公式:
=REGEXP(A1,"[一-龜]+") [一-龜]代表漢字,詳細(xì)解釋請(qǐng)閱讀下面的文章 提取非中文的公式: =REGEXP(A1,"[^一-龜]+") 正則表達(dá)式解釋:
[] :這是一個(gè)字符集,用于匹配括號(hào)內(nèi)列出的任意單個(gè)字符。
^ :在字符集的開(kāi)頭,它表示否定,即匹配不在字符集中的任何單個(gè)字符。
一-龜 :這表示從漢字“一”到漢字“龜”的字符范圍。注意,這個(gè)范圍并不是按照字母順序來(lái)定義的,而是按照 Unicode 編碼的順序。這意味著它將匹配從“一”到“龜”這個(gè)范圍內(nèi)所有的漢字。
+ :表示匹配前面的模式(在這里是字符集)一次或多次。
提取第一個(gè)漢字后的所有內(nèi)容 公式: =REGEXP(A2,"[一-龜]+.*") 正則表達(dá)式解釋:
[一-龜] :這是一個(gè)字符集,表示匹配從漢字“一”到漢字“龜”之間的任意單個(gè)漢字。注意,這里的范圍并不是基于字典順序,而是基于這些漢字在 Unicode 編碼中的順序。
+ :表示匹配前面的字符集(在這里是 [一-龜] )一次或多次。也就是說(shuō),這個(gè)正則表達(dá)式會(huì)匹配一個(gè)或多個(gè)連續(xù)的漢字,這些漢字的范圍是從“一”到“龜”。
.* :這里的 . 表示匹配除了換行符之外的任意單個(gè)字符,而 * 表示匹配前面的字符(在這里是 . )零次或多次。因此,.* 會(huì)匹配任意數(shù)量的任意字符(包括零個(gè)字符)。
提取第一個(gè)漢字前的內(nèi)容 公式 =REGEXP(A2,"^[^一-龜]+") 正則表達(dá)多解釋:
^ :這個(gè)符號(hào)表示匹配字符串的開(kāi)始位置。也就是說(shuō),整個(gè)正則表達(dá)式模式必須匹配字符串的起始部分。
[] :這是一個(gè)字符集,用于匹配括號(hào)內(nèi)列出的任意單個(gè)字符。
^ :在字符集的開(kāi)頭,它表示排除、否定,即匹配不在字符集中的任何單個(gè)字符。注意,這里的 ^ 是字符集內(nèi)的第一個(gè)字符,因此它表示否定,而不是匹配字符串的開(kāi)始位置。
一-龜 :這表示從漢字“一”到漢字“龜”的字符范圍。注意,這個(gè)范圍并不是按照字母順序來(lái)定義的,而是按照 Unicode 編碼的順序。
+ :表示匹配前面的模式(在這里是字符集)一次或多次。
按指定字符拆分
公式: =REGEXP(A2,"([^,]+)") 按換行符拆分 =REGEXP(A2,".+") 正則表達(dá)式解釋
. :這個(gè)符號(hào)在正則表達(dá)式中表示匹配除了換行符之外的任意單個(gè)字符。
+ :這個(gè)符號(hào)表示匹配前面的字符(在這里是 . )一次或多次。
還有其他更復(fù)雜的用法,我們下篇文章再介紹。
|