使用正则表达式在第一个空格/冒号上分割/分隔字符串

时间:2014-02-13 14:13:09

标签: regex go

我正在尝试使用正则表达式拆分字符串。例如:

12 13: 14: 15 => One-12, Two-13 , Three-14: 15

我正在尝试使用以下正则表达式:

^(?P< one>.*)\\s(?P< two>.*):\\s(?P< three>.*)$

所以当我看到它时,“one”应该是第一个“space”(\ s)之前的值,然后直到下一个冒号(:),该值应为“2”,之后的所有内容应为“3”。

但我得到的输出是:One-12 13:,Two-14,Three-15

注意:这是Golang类型的正则表达式,但我想这是一个普通的正则表达式问题。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

问题可能在于它试图对最左边的模式进行最长时间的匹配。如果是这种情况,请尝试更改原始

^(?P< one>.*)\\s(?P< two>.*):\\s(?P< three>.*)$

here......^

不允许在这些字符中使用冒号 - [^:]如果像普通的sed正则表达式一样。为安全起见,如果一条线上可能有两个以上的冒号,也可以在第二部分进行。

^(?P<one>[^:]*)\\s(?P<two>[^:]*):\\s(?P<three>.*)$

编辑: 在将\\s更改为\s并删除模式名称中的原始空格后,这似乎会根据this tester产生差异。同样here