整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          基礎(chǔ)擴展 | 08. VBA正則表達式

          正則表達式(RegEx)是一系列字符,定義搜索模式,用于查找字符串中特定的字符模式。

          VBA正則表達式的語法與其他語言(如Python)中使用的語法有較大的區(qū)別,主要是因為VBA的RegEx對象帶有可選參數(shù),因此有時必須指定這些參數(shù)以獲得與在其他語言中使用標(biāo)準(zhǔn)的正則表達式語法相同的結(jié)果。

          VBA正則表達式語法基礎(chǔ)

          正則表達式搜索模式是由一個或多個下列元素組成的字符序列:

          元字符

          元字符是字符或字符組合,在正則表達式模式中具有特殊含義。元字符可以匹配輸入文本中的幾個不同字符,甚至可以表示字符以外的其他字符。下面是需要熟練掌握的一些元字符。

          通配符。未轉(zhuǎn)義的句點匹配任意字符,但新行除外。

          “字符串或者行的開頭”或“否定”。插入符號在搜索模式中的重要性取決于上下文。1)如果在VBA中將參數(shù)設(shè)置為True,則插入符號表示“行首”,而不是“字符串的開頭”。2)如果插入符號放在一個字符類[^]中,它就像一個否定,即“匹配與字符類的其他參數(shù)不匹配的所有字符。”

          “字符串的結(jié)尾。”搜索模式中美元符號的重要性取決于上下文。如果在VBA中將參數(shù)設(shè)置為True,則美元符號表示“行尾”,而不是“字符串結(jié)尾”。

          “轉(zhuǎn)義字符。” 元字符前面的反斜杠將其轉(zhuǎn)換為文字字符。

          \b

          “字邊界”或“退格字符”。在字符類的外面,\b匹配文本源中單詞之前或之后的位置。在字符類中,\b表示退格符。

          \B

          “不是一個字邊界。”\B是\b的否定,但在字符類中沒有替代含義。

          \d

          “數(shù)字。”匹配從0至9的任意數(shù)字。

          \D

          “非數(shù)字。”匹配不是數(shù)字的任意字符。

          \s

          “空白”。匹配空格、換行符或制表符。

          \S

          “非空白。”匹配不是空格、換行符或制表符的字符。

          字符^、$和\b稱為錨點,因為它們匹配字符之前、之后或之間的位置。

          操作符

          一些元字符改變了如何解釋搜索模式中的一個或多個其他元素,例如,它們對這些其他元素執(zhí)行操作。VBA正則表達式具有三種類型的運算符。

          布爾運算“或”

          元字符:|

          說明:表示布爾“或”運算符

          示例:a|b匹配“a”或“b”

          分組

          元字符:()

          說明:括號用于下列目的:1)定義運算符的范圍和優(yōu)先級;2)對字符進行分組并記住文本。

          示例:h(a|e)y匹配“hay”或“hey”

          量化

          元字符:?

          說明:前一個元素出現(xiàn)0次或1次。

          示例:colou?r匹配“color”和“colour”

          元字符:*

          電子郵件地址上的r是什么意思_電子郵件地址@之后是什么_電子郵件中的地址怎么寫

          說明:前一個元素出現(xiàn)0次或多次。

          示例:ab*c匹配“ac”、“abc”、“abbc”、“abbbc”,等等

          元字符:+

          說明:前一個元素出現(xiàn)1次或多次。

          示例:ab+c匹配“abc”、“abbc”、“abbbc”,等等,但不匹配“ac”

          元字符:{n}

          說明:前面的項目恰好匹配n次。

          示例:a{3}匹配“aaa”

          元字符:{min,}

          說明:前面的項目匹配min次或更多次。

          示例:a{1,}匹配“a”、“aa”、“aaa”,等等

          元字符:{min,max}

          說明:前面的項目匹配至少min次,但不多于max次。

          示例:a{1,3}匹配“a”、“aa”和“aaa”,但不匹配“aaaa”

          字符類

          字符類或字符集使用方括號[]指定,一些最常見的如下:

          [a-z]

          范圍從a到z的小寫字母集。

          [A-Z]

          范圍從A到Z的大寫字母集。

          [0-9]

          范圍從0到9的單個數(shù)字集。

          字符類經(jīng)常與搜索模式中的運算符一起使用。例如,[0-5] +轉(zhuǎn)換為“找到一個或多個數(shù)字”,而不是僅從0到5的單個數(shù)字。

          函數(shù)

          在VBE菜單欄中,選取“工具——引用”命令,在“引用”對話框中找到并選取“ Regular 5.5”復(fù)選框,如下圖1所示。

          電子郵件地址@之后是什么_電子郵件地址上的r是什么意思_電子郵件中的地址怎么寫

          圖1

          插入一個標(biāo)準(zhǔn)模塊并輸入下面的代碼:

          Sub ()

          Dim r As Match

          Dim As

          Dim As String

          Dim As String

          = "在這個字符串中包含郵件地址,'Mary-Jo.T.+'."

          ="[a-z0-9-.+_]+@[a-z-]+\.[a-z]+"

          Set = RegEx(,, , , True)

          If Not Is Nothing Then

          For Each r In

          Debug.Print r

          Next r

          End If

          End Sub

          RegEx( , As String, _

          As Boolean, As Boolean, _

          As Boolean)

          Dim As

          Dim As New RegExp

          If Then

          With

          .Global =

          . =

          . =

          .Pattern =

          End With

          If .Test() Then

          Set =.Execute()

          Set RegEx =

          End If

          End If

          End

          過程將調(diào)用自定義的RegEx函數(shù)。在過程中,在變量中指定輸入文本,在變量中定義了搜索模式。代碼中,輸入文本包含一個假定電子郵件地址的字符串,其中包含有效電子郵件地址中允許的所有字符類型(允許+號)。無論在輸入文本中如何重新排列該電子郵件地址,自定義函數(shù)RegEx都會找到它并將其返回,前提條件是,你要傳遞正確的參數(shù)。

          在RegEx函數(shù)中前兩個參數(shù)是剛才討論的輸入字符串和搜索模式變量,這些參數(shù)是必需的,而接下來的三個參數(shù)可選:

          在過程中,設(shè)置參數(shù)為False,但是如果我們將其設(shè)置為True并且在輸入文本中有多個電子郵件地址,那么它們將全部返回到匹配集合中。可選參數(shù)設(shè)置為True,否則搜索模式會變長:

          [a-zA-Z0-9-.+_]+@[a-zA-Z-]+\.[a-zA-Z]+

          上面模式中括號內(nèi)的項目表示字符集,后面跟著的加號是量詞,用于指定要查找字符的數(shù)量。中間的“@”字符表示搜索該字符,兩對雙括號中的點被反斜杠轉(zhuǎn)義,表示搜索文本中的點。

          從左至右閱讀上述模式,其表達的意思如下:

          查找一個或者多個從a到z的小寫字母或大寫字母、從0到9的數(shù)字、連字符(-)、點(.)、加號(+)或下劃線(_)

          并查找

          “@”符號

          并查找

          一個或者多個從a到z的小寫字母或大寫字母,或連字符(-)

          并查找

          “.”號

          并查找

          一個或者多個從a到z的小寫字母或大寫字母

          如果滿足所有條件并且輸入的字符串中的所有匹配字符是連續(xù)的且順序正確,那么RegEx函數(shù)將返回匹配的結(jié)果。這意味著,如果搜索模式中含有空白字符,將從根本上改變其意義。如果你錯誤地在搜索模式中包含了空白字符,那么RexEx將在你指定的其他字符中查找空格。

          小結(jié)

          正則表達式常用于“查找和替換”,其中替換功能使用RegEx對象的Replace方法。你可以使用VBA正則表達式進行各種高級文本處理,包括:

          雖然RegEx有很多非常好的應(yīng)用場合,但是也有一些不應(yīng)該使用的情形:


          主站蜘蛛池模板: 国产综合无码一区二区辣椒| 一区二区视频传媒有限公司| 中文字幕日韩一区二区三区不| 国产在线精品一区二区不卡麻豆| 国产精品一区二区三区久久 | 日本免费一区二区在线观看| 国产精品无码亚洲一区二区三区| 精品人妻一区二区三区四区| 日本道免费精品一区二区| 日韩高清国产一区在线| 国产成人一区二区三区电影网站| 精品乱子伦一区二区三区高清免费播放 | 午夜DV内射一区二区| 在线观看一区二区三区视频| 高清国产精品人妻一区二区| 亚洲AV日韩综合一区尤物| 一级毛片完整版免费播放一区| 日韩av无码一区二区三区| 国产无吗一区二区三区在线欢| 国产亚洲一区二区在线观看| 韩国资源视频一区二区三区| 国产福利精品一区二区| 国产精品亚洲一区二区无码| 福利一区二区三区视频在线观看| 日韩在线一区视频| 亚洲国产精品一区| 一区二区三区四区电影视频在线观看 | 国产一区内射最近更新| 日韩免费无码一区二区三区 | 国产精品小黄鸭一区二区三区| 成人区精品一区二区不卡亚洲| 中文字幕一区在线播放| 国模精品视频一区二区三区| 免费观看一区二区三区| 国产传媒一区二区三区呀| 色婷婷一区二区三区四区成人网 | 人妻体内射精一区二区三四| 日韩精品电影一区亚洲| 欧美日韩国产免费一区二区三区 | 精品视频一区二区三区免费| 国产一区二区在线观看麻豆|