原文標(biāo)題:《這 3 個(gè)新增的 Excel 正則函數(shù),太牛 X 了!》
大家好,我是會(huì) Excel 數(shù)據(jù)處理的小爽~
之前我們講過(guò) WPS 新增的、一個(gè)非常強(qiáng)大的文本處理函數(shù) —— Regex 函數(shù)。(文章請(qǐng)戳)
它既可以做文本判斷,也可以做文本提取,甚至可以做文本替換。
Regex 函數(shù)其實(shí)就是下面三個(gè)正則函數(shù)的集合版本。
分別是 :
文本判斷:Regextest
文本提?。篟egexextract
文本替換:Regexreplace
如今,Office 365 中的 Excel,也更新這三個(gè)正則函數(shù)了,WPS 和 Excel 的正則函數(shù)語(yǔ)法差不多,大家可以對(duì)照著學(xué)習(xí)。
鑒于有小伙伴想看看進(jìn)階一點(diǎn)的正則函數(shù)。
今天,小爽就繼續(xù)來(lái)聊聊正則函數(shù)。
我們?cè)谌粘9ぷ髦?,除了需要?duì)文本進(jìn)行判斷,提取,替換外,還可能需要對(duì)文本進(jìn)行插入,拆分等操作。
大家跟我一起往下看,進(jìn)一步認(rèn)識(shí)其他的正則表達(dá)式。
正則表達(dá)式是一種用于匹配和操作文本的強(qiáng)大工具,它是由一系列字符和特殊字符組成的模式,用于描述要匹配的文本模式。
正則表達(dá)式可以在文本中查找、替換、提取和驗(yàn)證特定的模式。
PS.本文使用 Excel 里面的正則函數(shù)進(jìn)行演示。
1、文本插入
如下圖,我們需要在中文和英文 / 數(shù)字中,插入一個(gè)分隔符「-」,以便更好地查看信息。
傳統(tǒng)的做法是:利用字節(jié)數(shù)確定文本的位置,然后進(jìn)行替換。
=REPLACE(A2,LENB(A2)-LEN(A2)+1,0"-")
這種做法也可以,但是如果單元格開(kāi)頭不是文本,公式就會(huì)出錯(cuò)??!
所以,最好的方法就是利用強(qiáng)大的正則函數(shù)!
如下圖:
=REGEXREPLACE(A2"(*[一-龜])(\w+)""$1-$2")
我們來(lái)看看這個(gè)公式:
=REGEXREPLACE(A2"(*[一-龜])(\w+)""$1-$2")
Regexreplace 語(yǔ)法:
=REGEXREPLACE (字符串,正則表達(dá)式,替換表達(dá)式,[指定替換實(shí)例],[是否區(qū)分大小寫(xiě)])
字符串:A2 單元格
正則表達(dá)式:"(.*[一-龜])(\w+)"
替換表達(dá)式:"$1-$2"
假設(shè)字符串為 "excel 小爽 xiaoshuang"。
(.*[一-龜]):第一分組
.* 除換行符之外的任意字符,* 代表 0 到多個(gè)
[一-龜]:后面緊接著一個(gè)中文字符
第一組匹配到的字符為 excel 小爽。
(\w+):第二分組:
\w:在正則表達(dá)式中,它表示字母數(shù)字字符,包括所有字母(a-z、A-Z)和數(shù)字(0-9)的字符。它等同于 "[A-Za-z0-9_]"
\w+ 也就是代表一個(gè)到多個(gè)
第二組匹配到的字符為 xiaoshuang。
替換表達(dá)式:"$1-$2"
$1 代表第一分組的內(nèi)容,也就是 "excel 小爽"
$2 代表第二分組的內(nèi)容,也就是 "xiaoshuang"
"$1-$2",也就是 "Excel 小爽-xiaoshuang"。
拆分函數(shù) Textsplit 目前還不能進(jìn)行正則語(yǔ)法拆分,不過(guò)我們可以借助正則函數(shù) Regexextract!
2、文本拆分
如下圖所示:我想提取出日期之間的姓名。
用 Textsplit 函數(shù)來(lái)做,需要先把數(shù)字和分隔符進(jìn)行數(shù)組拼接后,再進(jìn)行拆分。
=TEXTSPLIT(A2,VSTACK(SEQUENCE(10,1,0)"-")1)
如果用正則函數(shù)來(lái)做,不需要像拆分函數(shù)那樣進(jìn)行拼接,只要把需要拆分的字符,放在中括號(hào)中取反即可。
=REGEXEXTRACT(A2"[^0-9-]+"1)
Regexextract 語(yǔ)法:
=REGEXEXTRACT (字符串,正則表達(dá)式,[匹配方式])
匹配方式中:
0 - 第一個(gè)匹配項(xiàng) (默認(rèn)值)
1 - 所有匹配項(xiàng)
2 - 捕獲第一個(gè)匹配項(xiàng)的組
第三參數(shù)為 1,因?yàn)槲覀兪且ヅ渌械钠ヅ漤?xiàng)。
=REGEXEXTRACT(A2,"[^0-9-]+",1)
重點(diǎn)看第二參數(shù):正則表達(dá)式
"[^0-9-]+"
[] 中括號(hào):用于指定一個(gè)字符集合或區(qū)間,可以讓正則表達(dá)式匹配特定的字符或范圍。
^ 號(hào):在字符集合開(kāi)頭表示取反,即匹配除字符集合以外的其他字符。
- 號(hào):在字符集合中間表示范圍,但是如果它在開(kāi)頭或結(jié)尾,則只表示普通字符-
該表達(dá)式的意思是:取除了 0 到 9 和-之外的字符,取一個(gè)或者多個(gè),盡可能多的匹配。
只匹配數(shù)字和-之外的字符,是不是相當(dāng)于按照數(shù)字和-,進(jìn)行拆分了呢~
3、最后的話(huà)
今天我們?cè)僖淮螌W(xué)到新的正則表達(dá)式:
在 Regexreplace 函數(shù)中:
正則表達(dá)式,() 代表分組,有幾個(gè)括號(hào)就代表幾個(gè)分組
替換表達(dá)式,$n 代表第幾個(gè)分組
我們可以利用分組靈活的插入字符串
\w 代表,數(shù)字字母下劃線(xiàn) [0-9a-zA-Z_]
\W 就是,非數(shù)字字母下劃線(xiàn) [^0-9a-zA-Z_]
拆分中,我們可以通過(guò)中括號(hào)取反的方式進(jìn)而實(shí)現(xiàn)正則拆分:
[] 代表字符集,中括號(hào)中開(kāi)頭 ^ 代表取反 [^..]
那大家也不難想到:
\d 取反是 \D,也就是 [^\d] 和 \D 是一樣的。
好了,本文就到這里結(jié)束啦~
看到這里,小伙伴是不是覺(jué)得,正則也就是這么一回事呢~
后面文章我們會(huì)接著繼續(xù)聊聊更深的正則語(yǔ)法。
本文來(lái)自微信公眾號(hào):秋葉 Excel (ID:excel100),作者:小爽
廣告聲明:文內(nèi)含有的對(duì)外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。