3 回答
TA贡献1864条经验 获得超6个赞
变通模式可以是匹配以 开头的行{{info ,然后匹配任何 0+ 个尽可能少的字符直到仅}}在其上的行:
re.findall(r'(?sm)^{{[^\S\r\n]*info\s*(.*?)^}}$', s)请参阅正则表达式演示。
细节
(?sm)-re.DOTALL(现在,.匹配换行符)和re.MULTILINE(^现在,匹配行的开头并$匹配行的结束位置)标志^- 一行的开始{{- 一个{{子串[^\S\r\n]*- 0+ 个水平空格info- 一个子串\s*-0+空格(.*?)-第1组:0个以上的字符,尽可能少^}}$- 一行的开头和行的}}结尾。
TA贡献1872条经验 获得超4个赞
这个答案解释了如何使用递归来做到这一点(尽管是圆括号,但是很容易适应),但是,就我个人而言,我只是使用while循环来编写它:
b = 1
i = si = s.index('{')
i += 1
while b:
if s[i] == '{': b += 1
elif s[i] == '}': b -=1
i += 1
ss = s[si:i]
其中,您的字符串定义为:s,给出子字符串,ss,为:
>>> print(ss)
{{info .................
.....texts..............
...{{ some text }}...... // nested parenthesis 1
........................
...{{ some text }}...... // nested parenthesis 2
........................
}}
添加回答
举报
