解析字符串以添加到数组

解析字符串以添加到数组

假设我在一个单元格中有一个长字符串

答:1/2/15 校狗 9/20/19

B:(3个空格)1/8/16 学校猫 10/10/10

我想捕捉 1/2/15 和 1/8/16

问题是第一个字符串由 1 个空格分隔,第二个字符串由 3 个空格分隔

所以对我来说

myStringArr = Split(myString,” “) 
MsgBox myStringArr(1)

myStringArr(1) = 1/2/15

仅适用于第一个字符串,不适用于第二个字符串

我可以使用什么来代替“单个空格”条件来解析字符串并每次捕获第一个日期

答案1

这很简单,只要字符串的结构就是这样。

dim tmp() as Variant
dim left_date, right_date as string
for each DatesinString in StringArray
    tmp = split(LTrim(DatesinString), " ")
    left_date = tmp(0)
    right_date = tmp(Ubound(tmp))

next DatesinString

答案2

这是使用 Regex 的 VBA 解决方案。用户定义函数采用两个参数:单元格引用和匹配号。Regex Execute 方法返回所有匹配模式,函数根据请求返回相应的匹配(如果您想要返回输入字符串中的第二个日期)。匹配日期作为日期值返回,但可以通过删除 CDate() 函数将其修改为作为字符串返回。

Function ExtractDate(rng As Range, matchNum As Integer) As Variant
    Dim matches As Object
    Dim target As Variant
    Dim regex As Object

    Set regex = CreateObject("VBScript.RegExp")

    With regex
        .Pattern = "(0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])\/[0-9]{2}"
        .Global = True
    End With

    Set matches = regex.Execute(rng.Value)

    If matchNum > 0 And matchNum <= matches.Count Then
        target = CDate(matches.Item(matchNum - 1).Value)
    Else
        target = CVErr(xlErrNA)
    End If

    ExtractDate = target
End Function

使用示例:=ExtractDate(A1,2)

这将返回单元格 A1 中的字符串中找到的第二个日期

相关内容