(一)正则表达式有什么方法与属性
在VBA中,正则表达式可以使用VBScript Regular Expressions库来实现。以下是VBScript Regular Expressions库中常用的一些方法和属性:
1.Pattern属性:用于设置或获取正则表达式的模式。2.Global属性:一个布尔值,如果为True,则整个字符串都会被搜索匹配。3.IgnoreCase属性:一个布尔值,如果为True,则搜索匹配时不区分大小写。4.MultiLine属性:一个布尔值,如果为True,则模式可以匹配多行文本。5.Replace方法:用于替换匹配到的字符串。6.Execute方法:用于在字符串中查找匹配的模式。7.Test方法:用于测试字符串是否匹配模式。 |
---|
下面先用一外例子说明如何创建与使用
Sub ExampleRegex()
Dim regEx As Object
Dim strInput As String
Dim strPattern As String
Dim strReplace As String
' 创建一个正则表达式对象
Set regEx = CreateObject("VBScript.RegExp")
' 设置模式和属性
regEx.Pattern = "\d+" '匹配一个或多个数字
regEx.Global = True '全局匹配
regEx.IgnoreCase = True '不区分大小写
' 输入字符串
strInput = "This is a sample string 123456"
' 设置替换字符串
strReplace = "****"
' 执行替换操作
strInput = regEx.Replace(strInput, strReplace)
' 输出结果
MsgBox strInput
End Sub
(二)应用示例01:【替换所有的数字】
替换A列中所有的数字,输出到B列
Sub 替换所有的数字()
Dim regEx As Object
Dim strInput As String
Dim strPattern As String
Dim strReplace As String
' 创建一个正则表达式对象
Set regEx = CreateObject("VBScript.RegExp")
' 设置模式和属性
regEx.Pattern = "\d+" '匹配一个或多个数字
regEx.Global = True '全局匹配
regEx.IgnoreCase = True '不区分大小写
With ActiveSheet
Set rngs = .Range("A1:A10")
For Each r In rngs
r.Offset(0, 1).Value = regEx.Replace(r.Value, "")
Next
End With
End Sub
(三)应用示例02:【提取出A列中的姓名与电话】
如图,提取姓名,电话
下面我们将设计一个自定义函数,来完成
在Excel模板中设计一个函数
Function myExtract(myStr As String, flag As Integer)
Application.Volatile
With CreateObject("VBSCRIPT.REGEXP")
Select Case flag
Case 1
.Pattern = "[^\u4e00-\u9fa5]" '匹配汉字以外的字符
Case 2
.Pattern = "[^a-zA-Z]" '匹配英文以外的字符
Case 3
.Pattern = "[^0-9]" '匹配数字以外的字符
End Select
.Global = True
If .test(myStr) Then
myExtract = .Replace(myStr, "")
Else
myExtract = myStr
End If
End With
End Function
完成效果