新建一個Excel工作表
然后打開Excel自帶的VBA開發環境
導入一個庫
選擇 工具 > 引用
導入下面選中的庫,第一次導入需要使勁往下翻,界面特別蛋疼
GIF
然后粘貼下面的代碼
Public Function RegexSubString(text As String, pattern As String, Optional matcheIndex As Integer = 0, Optional subMatcheIndex As Integer = -1, Optional ignoreCase As Boolean = False, Optional multiLine As Boolean = True, Optional defaultText As String = "") As String ' text 參數 待匹配的文本 ' pattern 參數 正則表達式或者說模式文本 ' matcheIndex 參數(可選) 第幾個匹配項的索引,0是開頭第一個,-1是末尾第一個依次類推 ' subMatcheIndex 參數(可選) 匹配項中子匹配項的索引,從0開始,默認值是-1代表返回完整匹配項 ' ignoreCase 參數(可選) 如果為 True,則匹配忽略字母大小寫 ' multiLine 參數(可選) 如果為 True,則模式匹配發生在換行符之間 ' defaultText 參數(可選) 假如沒有匹配項則返回的默認文本,假如有匹配項但是子匹配項索引錯誤也會返回此值 Dim RegEx As New RegExp With RegEx .Global = True 'True,則找到字符串中模式的所有匹配項。如果為 False,則僅找到第一個匹配項 .ignoreCase = ignoreCase .multiLine = multiLine .pattern = pattern End With Dim ms As MatchCollection, m As Match, gs As SubMatches Set ms = RegEx.Execute(text) If ms.Count = 0 Then RegexSubString = defaultText Exit Function End If Dim index As Integer If matcheIndex >= 0 Then index = matcheIndex Else index = ms.Count + matcheIndex End If If index >= 0 And index < ms.Count Then Set m = ms.Item(index) Else RegexSubString = defaultText Exit Function End If Set gs = m.SubMatches If subMatcheIndex = -1 Then RegexSubString = m.Value Exit Function ElseIf subMatcheIndex >= 0 And subMatcheIndex < gs.Count Then RegexSubString = gs.Item(subMatcheIndex) Else RegexSubString = defaultText Exit Function End If End Function
GIF
關閉VBA開發環境,但不關閉工作表,然后把這個工作表另存為加載宏,因為excel有些歷史記錄關不掉,所以GIF錄得區域過小,但是應該能看懂
然后關閉該工作表,打開其他工作表,然后才去點擊Excel加載項,加載項的名字就是你另存為時輸入的名字
簡單使用示例
后面附一個使用正則表達式替換文本的VBA腳本
Public Function RegexReplace(text As String, pattern As String, replaceText As String, Optional replaceAll As Boolean = False, Optional ignoreCase As Boolean = False, Optional multiLine As Boolean = True) As String ' text 參數 待匹配的文本 ' pattern 參數 正則表達式或者說模式文本 ' replaceText 參數 用來替換的文本,可以使用 $1 來引用第一個子匹配項,依次類推 ' replaceAll 參數(可選) 是否替換所有匹配項 ' ignoreCase 參數(可選) 如果為 True,則匹配忽略字母大小寫 ' multiLine 參數(可選) 如果為 True,則模式匹配發生在換行符之間 Dim RegEx As New RegExp With RegEx .Global = replaceAll 'True,則找到字符串中模式的所有匹配項。如果為 False,則僅找到第一個匹配項 .ignoreCase = ignoreCase .multiLine = multiLine .pattern = pattern End With RegexReplace = RegEx.Replace(text, replaceText) End Function
簡單使用示例