在Excel VBA中用非静态定界符(01.01.2020,02.01.2020,…)分割字符串

问题描述 投票:-1回答:1

我有一个包含数十万个字符的字符串,基本上看起来像这样:

"  01.01.2020          foo bar bar bar foo  02.01.2020          foo fooooo bar foo morebar morefoo evenmorefoo [...]"

上面字符串的语言描述:该字符串包含大量数据集。每个数据集均以起始模式“ dd.mm.yyyy”开头(即两个空格,一个日期和十个空格)。在此开始模式之后(即,日期用空格包围)将遵循未定义的文本长度。未定义文本长度的结尾由以下数据集的开始模式标记。

如何使用上述开始模式作为分隔符将字符串分成数据集?我的问题是分隔符不是固定的,而是整个字符串中更改的日期。结果应如下所示:

"  01.01.2020         foo bar bar bar foo"
"  02.01.2020         foo fooooo bar foo morebar morefoo evenmorefoo"
"[...]"
excel vba string split delimiter
1个回答
0
投票

您可以将Regular Expressions与类似模式一起使用

[( [0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4})(请参阅https://regex101.com/r/fz3PIW/2/

和类似\n$1的替换模式。

该模式将查找任何看起来像日期并且以2个空格开头的内容,并用\n(代表换行符)和$1(代表找到的日期)代替。

示例:

Option Explicit

Public Sub Example()
    Const InputData As String = "  01.01.2020          foo bar bar bar foo  02.01.2020          foo fooooo bar foo morebar morefoo evenmorefoo [...]"

    Dim RegEx As New RegExp
    With RegEx
        .Global = True
        .MultiLine = False
        .IgnoreCase = False
        .Pattern = "(  [0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4})"
    End With

    Dim OutputData As String
    OutputData = RegEx.Replace(InputData, vbCrLf & "$1")

    Debug.Print OutputData
End Sub

请注意,在VBA中,\n不适用于换行符,而必须使用vbCrLf

因此,如果您的原始字符串是

  01.01.2020          foo bar bar bar foo  02.01.2020          foo fooooo bar foo morebar morefoo evenmorefoo [...]

结果将是


  01.01.2020          foo bar bar bar foo
  02.01.2020          foo fooooo bar foo morebar morefoo evenmorefoo [...]

请注意,结果总是以空行开头(或只是换行符,如果您不喜欢它,则需要在之后将其删除。)>

© www.soinside.com 2019 - 2024. All rights reserved.