解析带有两个分隔符的字符串 [[ {{
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= 之后不应有 ]
] 字符,因此忽略 [...]
内的匹配 ;;
。
请注意,这假设 [
和 ]
是平衡且未转义的。
解析此字符串时:
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= 之后不应有 ]
] 字符,因此忽略 [...]
内的匹配 ;;
。
请注意,这假设 [
和 ]
是平衡且未转义的。