Excel自定義函式使用正規表示式詳解

2021-06-28 11:43:21 字數 3528 閱讀 4165

函式exstr功能,根據正規表示式,替換或判斷或提取字串

'引數 str 源字串

'引數 parttern 正規表示式字串

'引數 actionid  函式功能 1正則方法一,替換符合正規表示式的字元

?正則方法二 判斷是否有符合正規表示式

?正則方法三,提取符合正規表示式的字元

'引數 repstr 指定替換的字元,可選項,預設為空

**如下

複製**

function exstr(str as string, parttern as string, actionid as integer, optional repstr as string = "")

dim regex as object

set regex = createobject("vbscript.regexp")

with regex

.global = true

.ignorecase = true

.multiline = true

.pattern = parttern

end with

select case actionid

case 1:

exstr = regex.replace(str, repstr)

case 2:

exstr = regex.test(str)

case 3:

dim matches as object

set matches = regex.execute(str)

for each match in matches

exstr = exstr & match.value

next

end select

end function

附常用幾個正規表示式

"^d+$"  //非負整數(正整數 + 0)

"^[0-9]*[1-9][0-9]*$"  //正整數

"^((-d+)|(0+))$"  //非正整數(負整數 + 0)

"^-[0-9]*[1-9][0-9]*$"  //負整數

"^-?d+$"    //整數

"^d+(.d+)?$"  //非負浮點數(正浮點數 + 0)

"^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮點數

"^((-d+(.d+)?)|(0+(.0+)?))$"  //非正浮點數(負浮點數 + 0)

"^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //負浮點數

"^(-?d+)(.d+)?$"  //浮點數

"^[a-za-z]+$"  //由26個英文本母組成的字串

"^[a-z]+$"  //由26個英文本母的大寫組成的字串

"[^a-z+$]"    '由26個英文本母的小寫組成的字串

" [^a-za-z0-9]+$"  『由數字和26個英文本母組成的字串

"^w+$"  //由數字、26個英文本母或者下劃線組成的字串

"^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$"    //email位址

"^[a-za-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?s*)?$"  //url

/^(d|d)-((0([1-9]))|(1[1|2]))-(([0-2]([1-9]))|(3[0|1]))$/   // 年-月-日

/^((0([1-9]))|(1[1|2]))/(([0-2]([1-9]))|(3[0|1]))/(d|d)$/   // 月/日/年

"^([w-.]+)@(([[0-9].[0-9].[0-9].)|(([w-]+.)+))([a-za-z]|[0-9])(]?)$"   //emil

"(d+-)?(d-?d|d-?d|^d)(-d+)?"   //**號碼

"^(d|1dd|2[0-4]d|25[0-5]).(d|1dd|2[0-4]d|25[0-5]).(d|1dd|2[0-4]d|25[0-5]).(d|1dd|2[0-4]d|25[0-5])$"   //ip位址

匹配中文字元的正規表示式: [^u4e00-u9fa5]

匹配雙位元組字元(包括漢字在內):[^x00-xff]

匹配空行的正規表示式:n[s| ]*r

匹配html標記的正規表示式:/<(.*)>.*|<(.*) />/

匹配首尾空格的正規表示式:(^s*)|(s*$)

匹配email位址的正規表示式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

匹配**url的正規表示式:^[a-za-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$

匹配帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-za-z][a-za-z0-9_]$

匹配國內**號碼:(d-|d-)?(d|d)?

用於查詢

型別

示例

任一字元

?

s?t 可找到「sat」和「set」。

任何字串

*

s*d 可找到「sad」和「started」。

單詞開頭

<

<(inter) 可找到「interesting」和「intercept」,但找不到「splintered」。

單詞結尾

>

(in)> 可找到「in」和「within」,但找不到「interesting」。

指定字元之一

[ ]

w[io]n 可找到「win」和「won」。

此範圍內的任一字元

[-]

[r-t]ight 可找到「right」和「sight」。範圍必須是公升序。

除了括號內範圍中的字元之外的任一字元

[!x-z]

t[!a-m]ck 可找到「tock」和「tuck」,但找不到「tack」或「tick」。

前乙個字元或表示式的 n 個匹配項

fed 可找到「feed」,但找不到「fed」。

前乙個字元或表示式的至少 n 個匹配項

fed 可找到「fed」和「feed」。

前乙個字元或表示式的 n 到 m 個匹配項

10 可找到「10」、「100」和「1000」。

前乙個字元或表示式的乙個或多個匹配項

@

lo@t 可找到「lot」和「loot」。

自定義函式 Excel之自定義函式

在excel中,當系統函式不能滿足我們的需求時候,我們可以使用vba自定義函式,如抓取網頁資料,翻譯詞彙,手機號歸屬地查詢等。下面將介紹2個自定義函式,idymd函式 身份證年月日性別 通過身份證號,返回性別,出生年月日。語法 idymd id 引數 id,身份證號,預設身份證長度18位。vba 如...

Excel 自定義函式

假設我們在excel中有以下需求 你可以巢狀使用if函式,判斷每乙個分數屬於哪乙個區間。但是,4層if會不會很容易出錯 如果是5個區間,甚至是10個區間呢?巢狀使用10個if不太現實,也很容易出錯吧。其實在excel中,我們可以自定義自己的函式,使用vb實現 下面的內容就介紹如何在excel中新增自...

easyExcel 匯出 excel 自定義表頭

easyexcel 匯出 excel 自定義表頭 效果圖 10個省級部門預算單位2019年部門預算執行和決算草案審計查出問題整改情況的報告 省工信廳關於2018 2019年省級工業轉型公升級資金分配使用專項審計查出問題整改情況的報告 response.setcontenttype 中文檔名編碼 re...