我有一个像这样的字符串
"yJdz:jkj8h:jkhd::hjkjh"
我想使用冒号作为分隔符将其拆分,但不是双冒号。期望的结果:
("yJdz", "jkj8h", "jkhd::hjkjh")
我正在尝试:
re.split(":{1}", "yJdz:jkj8h:jkhd::hjkjh")
但是我得到了错误的结果。
与此同时,我正在使用"::"
string.replace("::", "$$")
答案 0 :(得分:24)
你可以分开(?<!:):(?!:)
。这使用两个negative lookarounds(一个lookbehind和一个前瞻),断言有效匹配只有一个冒号,在它之前或之后没有冒号。
解释模式:
(?<!:) # assert that the previous character is not a colon
: # match a literal : character
(?!:) # assert that the next character is not a colon
需要两种外观,因为如果只有lookbehind,那么正则表达式引擎将匹配::
中的第一个冒号(因为前一个字符不是冒号),如果只有前瞻,第二个冒号会匹配(因为下一个字符不是冒号)。
答案 1 :(得分:11)
如果您愿意,可以使用lookahead and lookbehind执行此操作:
>>> s = "yJdz:jkj8h:jkhd::hjkjh"
>>> l = re.split("(?<!:):(?!:)", s)
>>> print l
['yJdz', 'jkj8h', 'jkhd::hjkjh']
此正则表达式基本上表示“匹配:
后面没有:
或前面有:
”