正则表达式,如何在不排除第一行的情况下将字符串分为两组

问题描述

我尝试使用 (?P<Time>.+)\,\s(?P<Station>.+),但它没有捕获第一行。

示例字符串是:

9:21:13 AM
9:21:29 AM,TS729
9:21:33 AM,TS729

在 regex101.com 上测试:

enter image description here

解决方法

你可以使用

^(?P<Time>[^,]+)(?:,\s*(?P<Station>.+))?$

查看 regex demo(切换到单元测试,链接在左窗格中)。

详情

  • ^ - 字符串的开始
  • (?P<Time>[^,]+) - Time 组:除逗号之外的任何一个或多个字符
  • (?:,\s*(?P<Station>.+))? - 一个可选的序列
    • , - 逗号
    • \s* - 零个或多个空格
    • (?P<Station>.+) - 除换行符之外的一个或多个字符被捕获到“Station”组中
  • $ - 字符串结束。

单元测试截图:

enter image description here