Rug*_*rra 13 python regex split
我有这样的字符串
"yJdz:jkj8h:jkhd::hjkjh"
Run Code Online (Sandbox Code Playgroud)
我想用冒号作为分隔符拆分它,但不是双冒号.期望的结果:
("yJdz", "jkj8h", "jkhd::hjkjh")
Run Code Online (Sandbox Code Playgroud)
我正在尝试:
re.split(":{1}", "yJdz:jkj8h:jkhd::hjkjh")
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误的结果.
在此期间,我逃避"::"
,用string.replace("::", "$$")
Dan*_*uis 27
你可以拆分(?<!:):(?!:)
.这使用两个负面的外观(lookbehind和lookahead),它断言有效匹配只有一个冒号,在它之前或之后没有冒号.
解释模式:
(?<!:) # assert that the previous character is not a colon
: # match a literal : character
(?!:) # assert that the next character is not a colon
Run Code Online (Sandbox Code Playgroud)
两种外观都是必需的,因为如果只有lookbehind,那么正则表达式引擎将匹配第一个冒号::
(因为前一个字符不是冒号),如果只有前瞻,则第二个冒号匹配(因为下一个字符不是冒号).
eld*_*his 11
如果你愿意,你可以用lookahead和lookbehind来做到这一点:
>>> s = "yJdz:jkj8h:jkhd::hjkjh"
>>> l = re.split("(?<!:):(?!:)", s)
>>> print l
['yJdz', 'jkj8h', 'jkhd::hjkjh']
Run Code Online (Sandbox Code Playgroud)
这个正则表达式基本上是说"匹配a :
后面没有a :
或者前面跟a :
"
归档时间: |
|
查看次数: |
6207 次 |
最近记录: |