EXCEL 使用正規表示式

2021-09-05 09:42:52 字數 2955 閱讀 2029

本文參考:

裡常用的幾個正規表示式)

正規表示式提取值)ab

1商品名稱(比較典型的原始資料)

型號(輸出結果) 2

美的(midea) 電飯煲 智慧型ih加熱 家用電飯鍋 4l mb-fs4006

mb-fs4006

3美的(midea) 多用途鍋 4.5l 家用電火鍋鴛鴦鍋 1500w mc-wlhn32a

mc-wlhn32a

4美的(midea) 電水壺he1504a 家用便捷式燒水壺四段溫304不鏽鋼電熱水壺

he1504a

5美的(midea)電熱水瓶pf708c-50t雙出水5段溫控 家用5公升電熱水壺304不鏽鋼電水壺

pf708c-50t

6美的(midea)電壓力鍋 ih電磁加熱可中途加菜鋼膽5l高壓鍋 my-ht5077p

my-ht5077p

7美的(midea) 破壁機 真空輔食機 智慧型家用多功能果汁機 榨汁機 mj-bl1507a

mj-bl1507a

8美的(midea) 電磁爐 恆勻火 十檔火力調節 一鍵桑拿蒸c21-qh2130(贈不鏽鋼蒸鍋)

c21-qh2130

9美的(midea)電燉鍋  煲湯鍋 電砂鍋 隔水燉 火山陶釜三膽 4l電燉盅 tgs40w

tgs40w

10美的(midea)電熱水壺即熱式不鏽鋼電水壺 6段溫控燒水壺 3l/3公升台式飲水機mk-he3001

mk-he3001

11美的(midea)電磁爐 纖薄勻火滑動觸控 家用火鍋爐 c21-rh2153火力時間雙顯示

c21-rh2153

12美的(midea) 電磁爐hst2105 紅外火力 不挑鍋具 紅外爐雙環控火電陶爐

hst2105

13美的(midea)電飯煲 2l智慧型ih加熱 家用迷你智慧型預約觸控操控 小電飯鍋mb-fz2001

mb-fz2001

14美的(midea)電壓力鍋 球形內膽可作電飯煲 5l壓力鍋 家用雙膽高壓鍋yl50easy301

yl50easy301

15美的(midea)電餅鐺mc-jk30easy301家用煎烤機雙面加熱煎餅鐺早餐機自動斷電煎餅機

mc-jk30easy301

16美的(midea) 空氣炸鍋 家用全自動  高光耐熱pp材料白色 mf-wzn3201空氣無油炸鍋

mf-wzn3201

17美的(midea) 多用途鍋 多功能家用電火鍋 蒸鍋 6l mc-lhn30c

mc-lhn30c

18美的(midea) 電飯煲 3l家用智慧型預約  不鏽鋼拉絲機身電飯鍋 mb-fs3073

mb-fs3073

19美的(midea)電熱水瓶 熱水壺電水壺304不鏽鋼 電熱水壺熱水瓶mk-sp50colour201

mk-sp50colour201

20美的(midea)多用途鍋zg26easy401 食品級不鏽鋼 三層大容量電蒸鍋 電蒸籠

zg26easy401

function getstr(rng as range)

with createobject("vbscript.regexp")

.global = true

.pattern = "\d+\*\d+\+\d"    '表示式

if .execute(rng).count = 0 then

getstr = ""

else

getstr = .execute(rng)(0)

end if

end with

end function

(**的用法就不敷述了)

function getstr(rng as range, str as string)

'第乙個引數rng為區域保持不變, 新增第二個引數str(作為正規表示式)

with createobject("vbscript.regexp")

.global = true

.pattern = str '表示式,直接從使用者函式的第二個引數中呼叫

if .execute(rng).count = 0 then

getstr = ""

else

getstr = .execute(rng)(0)

end if

end with

end function

下面介紹一下我所用的正規表示式以及思路:

=getstr(a1,"((?!midea)(?![0-9])[\w][-][\w])|(?!midea)(?![0-9])[0-9a-z][-][0-9a-z](\w)")
第二個引數的的內容為從『 | 』這個符號分成兩部分理解:

((?!midea)(?![0-9])[\w][-][\w])

其中:(?!midea)     表示不包含字元「midea」 因為每一行裡面都有這個

(?![0-9])表示不包含以3個及以上的數字組合的開頭(故將其放置在前面),目的是為了排除第三行中的1500w

[\w]數字及大小寫字母1,19個長度的組合

[-] 緊接著後面一定會有乙個「-」減號

[\w]最後數字及大小寫字母1,19個長度的組合,之所以是19這個數只是為了能夠包含住所有應該匹配到的型號

這樣的結果就是所有帶有「-」減號的型號

(?!midea)(?![0-9])[0-9a-z][-][0-9a-z](\w)"

這是「|」符號後面的部分,「|」表示「或」的意思,即前面的沒有匹配到就用後面的匹配

前面的一樣的就不重複介紹了,從不一樣的開始介紹:

[0-9a-z]開頭為數字或大寫字母,且長度為0到19位字元的(因為是從0開始的,所以可以有也可以沒有)

[-]表示後面緊接零個或者1個「-」減號

[0-9a-z]前面兩個有可能都沒有,也就是說這裡有可能是開頭的字元,必須為大寫字母或數字

(\w)最後的字元可以是大小寫字母或數字,長度為3到10個字元

使用正規表示式

如果原來沒有使用過正規表示式,那麼可能對這個術語和概念會不太熟悉。不過,它們並不是您想象的那麼新奇。請回想一下在硬碟上是如何查詢檔案的。您肯定會使用 和 字元來幫助查詢您正尋找的檔案。字元匹配檔名中的單個字元,而 則匹配乙個或多個字元。乙個如 data?dat 的模式可以找到下述檔案 data1.d...

使用正規表示式

本文節選自 並有稍微修正。使用正規表示式 您可以使用正規表示式做很多事情。在以下的列表中,您可以找到一些最普通 最常用的正規表示式的例子。表示文字串必須在一行的開頭。所以,當查詢行的開頭只為 hosts 的行,可以使用命令 grep ls hosts 代表了一行的結尾。所以,當查詢行的結尾只為 ho...

正規表示式使用

1 靜態match方法 使用靜態match方法,可以得到源中第乙個匹配模式的連續子串。2 靜態的matches方法 這個方法的過載形式同靜態的match方法,返回乙個matchcollection,表示輸入中,匹配模式的匹配的集合。3 靜態的ismatch方法 此方法返回乙個bool,過載形式同靜態...