示例:数据保存在A列中,需要将其中的日期和金额分别提取至B列和C列。其中日期有两种不同的格式,金额可能包含小数点、千分位和货币标识。
采用的VBA代码如下:
代码语言:javascript复制Sub RegExp_Date_Num()
'提取日期和金额
Dim objRegEx As Object
Dim objMH As Object
Dim ii As Integer, form As String
Set objRegEx = CreateObject("vbscript.regexp")
objRegEx.Pattern = "(d{4}-d{2}-d{2}|d{4}.d{2}.d{2}).*?(([A-Z]{3})*d [d.,]*元)"
objRegEx.Global = True
For ii = 2 To Cells(Rows.Count, "A").End(xlUp).Row
form = Cells(ii, "A").Value2
Set objMH = objRegEx.Execute(form)
If objMH.Count > 0 Then
MsgBox objMH.Count
Cells(ii, 2) = CStr(objMH(0).submatches(0))
Cells(ii, 3) = CStr(objMH(0).submatches(1))
End If
Next
Set objRegEx = Nothing
Set objMH = Nothing
Exit Sub
End Sub
(1)字符|
称为管道
。希望匹配许多表达式中的一个时,就可以使用它。(d{4}-d{2}-d{2}|d{4}.d{2}.d{2})
,用于匹配两种日期格式。
(2).*?
,使用非贪心
模式匹配所有文本。
(3)*
,匹配零次或多次前面的分组。
参考资料:
[1] VBA之正则表达式(4)-- 提取日期和金额(https://blog.csdn.net/taller_2000/article/details/88366081)
[2] Python编程快速上手(第2版)(https://book.douban.com/subject/35387685/)