继续使用正则表达式。这里有一个示例文本:
'[1 | Hi {name} | Hello {name} | Good morning {name}]其他文本{1 .|{name}| 3| 4} OTHER {5 |{name}| 6| 7}'
需要从中提取结构[1 | Hi {name} | hello {name} | Good morning {name}]and{1|{name}| 3| 4}and{5 |{name}| 6| 7}
re.findall(r's*({[^(/{name})].+})s*', message)
但是我写不出符合要求的正则表达式表达式{name}必须被忽略
这对于正则表达式来说是很棘手的,但是对于"解析"来说非常简单:
def top_level_parens(s):
stack = []
for n, c in enumerate(s):
if c in '({[':
stack.append(n)
elif c in ')}]':
m = stack.pop()
if not stack:
yield s[m:n+1]
result = list(top_level_parens(your_string))
假设父元素是适当平衡的,如果情况并非总是如此,请在"解析器"中添加额外的检查。
到目前为止,我的解决方案是
re.findall(r'({[^n].*?[^e]})|([.*?])', message)