【发布时间】:2021-08-06 05:01:13
【问题描述】:
我一直在尝试在 Kotlin 应用程序中编写一个正则表达式,我可以使用它来解析由时间戳前缀分隔的多行日记条目,如下所示:
28-03-2020 23:00:00 - This
is
line
1
28-03-2021 14:23:15 - This
is
line
2
每个重复组应捕获时间戳 (1) 以及在行首或文本结尾处的下一个时间戳模式 (2) 之前出现的所有文本。
因此,在上面的示例中,我希望得到以下输出:
第 1 场比赛
第 1 组:28-03-2020 23:00:00
第 2 组:This\nis\nline\n1\n
第 2 场比赛
第 1 组:28-03-2020 14:23:15
第 2 组:This\nis\nline\n2\n
到目前为止,我已经设法想出了一个可以捕获第一个匹配项的正则表达式:
^(\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2}) -([\s\S]*?)(?=^\d{2}.*?)
但是,到目前为止,我一直未能成功捕获重复组。有人可以帮忙吗?
我已经设置了这个regex101 session 来测试它。
【问题讨论】:
-
你试过 findAll 吗? kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/-regex/…
-
如果您需要更多帮助,请分享您的 Kotlin 代码:重复分组是什么意思?此外,您的正则表达式至少应该看起来像
^(\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2}) -([\s\S]*?)(?=^\d{2}|\z)。 -
我已经接受了第四只鸟的回答,因为它给了我完成Kotlin solution所需的一切。