解析带有两个分隔符的字符串 [[ {{

Parse a string with two delimiters [[, {{

解析此字符串时:

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]]']

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

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

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

这里它将在 ;; 上拆分,并带有负前瞻性 (?![^[]*]),这意味着在右侧,在 0 个或多个非 [=14= 之后不应有 ] ] 字符,因此忽略 [...] 内的匹配 ;;

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