dongle7882
2014-02-13 14:13 阅读 276
已采纳

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

I am trying to split a string using regex. For example:

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

i am trying to use the following regex:

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

So as I see it, "one" should be the value before first "space"(\s) and then until next colon(:) the value should be "two" and everything after that should be "three".

But the output I get is: One-12 13:, Two-14, Three-15

Note: This is Golang type of regex but I guess this is a general Regex problem. Kindly help me out with this one.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    dongnuoyi8833 dongnuoyi8833 2014-02-13 14:30

    The problem could be that it's trying to do the longest match for the leftmost pattern. If that's the case, try changing your original

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

    here......^
    

    to not permit a colon among those characters - [^:] if like regular sed regexes. For safety's sake, if there may be more than two colons in a line, do that on the second part too.

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

    Edit: That seems to make the difference according to this tester, after changing the \\s to just \s and removing the original spaces in the pattern names. Likewise here.

    点赞 评论 复制链接分享

相关推荐