我有一个包含数十万个字符的字符串,基本上看起来像这样:
" 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"
"[...]"
您可以将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 [...]
请注意,结果总是以空行开头(或只是换行符,如果您不喜欢它,则需要在之后将其删除。)>