0

解析此字符串时:

import re
s = 'hello how are you? {{foo;;[[1;;2;;3]];;bar;;[[0;;2;;3]]}} im okay {{ABC;;DEF;;[[10;;11]]}}'
for m in re.findall(r'{{(.*?)}}', s):
    print('curly brackets: ', m)
    L = m.split(';;')
    print(L) 

m.split(';;')应该给出这个:

['foo', '[[1;;2;;3]]', 'bar', '[[0;;2;;3]]']

代替:

['foo', '[[1', '2', '3]]', 'bar', '[[0', '2', '3]]']

如何修改拆分来做到这一点?

4

1 回答 1

3

您可以将此拆分与负前瞻一起使用:

L = re.split(r';;(?![^[]*])', m)

在这里,它将;;以负前瞻方式拆分,(?![^[]*])这意味着在右侧不应有]0 或更多非字符之后,因此忽略内部[匹配。;;[...]

请注意,这是假设[并且]是平衡的和未转义的。

于 2020-04-13T19:13:54.813 回答