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:
("yJdz", "jkj8h", "jkhd::hjkjh")
I'm trying with:
re.split(":{1}", "yJdz:jkj8h:jkhd::hjkjh")
but I got a wrong result.
In the meanwhile I'm escaping "::"
, with string.replace("::", "$$")
You can do this with lookahead and lookbehind, if you want:
This regex essentially says "match a
:
that is not followed by a:
or preceded by a:
"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:
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).