"yJdz:jkj8h:jkhd::hjkjh"
我想用冒号作为分隔符分割一个字符串,而不是一个双冒号。期望的结果:
("yJdz", "jkj8h", "jkhd::hjkjh")
我想有:
re.split(":{1}", "yJdz:jkj8h:jkhd::hjkjh")
,但我得到了一个错误的结果。
在我逃离"::"
的同时,string.replace("::", "$$")
"yJdz:jkj8h:jkhd::hjkjh"
我想用冒号作为分隔符分割一个字符串,而不是一个双冒号。期望的结果:
("yJdz", "jkj8h", "jkhd::hjkjh")
我想有:
re.split(":{1}", "yJdz:jkj8h:jkhd::hjkjh")
,但我得到了一个错误的结果。
在我逃离"::"
的同时,string.replace("::", "$$")
你可以拆分(?<!:):(?!:)
。这使用两个negative lookarounds(向后看和向前看),它声明有效匹配只有一个冒号,在它之前或之后没有冒号。
为了解释图案:
(?<!:) # assert that the previous character is not a colon
: # match a literal : character
(?!:) # assert that the next character is not a colon
需要两个lookarounds,因为如果有仅回顾后,那么正则表达式引擎将在::
匹配第一结肠(因为先前的字符不是冒号),如果只有前瞻,第二个冒号会匹配(因为下一个字符不是冒号)。
你可以用lookahead and lookbehind做到这一点,如果你想:
>>> s = "yJdz:jkj8h:jkhd::hjkjh"
>>> l = re.split("(?<!:):(?!:)", s)
>>> print l
['yJdz', 'jkj8h', 'jkhd::hjkjh']
此正则表达式本质上说,“匹配:
后面没有用一个:
或之前有一个:
“