Split with single colon but not double colon using regex

后端 未结 2 1596
太阳男子
太阳男子 2020-12-06 17:11

I have a string like this

\"yJdz:jkj8h:jkhd::hjkjh\"

I want to split it using colon as a separator, but not a double colon. Desired result:

相关标签:
2条回答
  • 2020-12-06 17:24

    You could split on (?<!:):(?!:). This uses two negative lookarounds (a lookbehind and a lookahead) which assert that a valid match only has one colon, without a colon before or after it.

    To explain the pattern:

    (?<!:)  # assert that the previous character is not a colon
    :       # match a literal : character
    (?!:)   # assert that the next character is not a colon
    

    Both lookarounds are needed, because if there was only the lookbehind, then the regular expression engine would match the first colon in :: (because the previous character isn't a colon), and if there was only the lookahead, the second colon would match (because the next character isn't a colon).

    0 讨论(0)
  • 2020-12-06 17:35

    You can do this with lookahead and lookbehind, if you want:

    >>> s = "yJdz:jkj8h:jkhd::hjkjh"
    >>> l = re.split("(?<!:):(?!:)", s)
    >>> print l
    ['yJdz', 'jkj8h', 'jkhd::hjkjh']
    

    This regex essentially says "match a : that is not followed by a : or preceded by a :"

    0 讨论(0)
提交回复
热议问题