s = "[ab[cd]]fg[hi]"
我想获取子字符串[ab[cd]]
问题实际上是可以有任意数量的开括号和闭括号。供参考的this是我要解决的问题。
如果我使用re.search("\[(.*)\]", s)
,则它与最后一个]
匹配
如果我使用re.search("\[(.*?)\]", s)
,它会停在第一个]
我希望正则表达式匹配字符串{{1}的[ab[cd]]
并匹配字符串[ab[cd]]fg[hi]
的{{1}}
有什么想法吗?
谢谢
答案 0 :(得分:2)
除非事先知道对括号嵌套数量的限制,否则re
模块是不可能的-但是regex
模块可以通过递归来做到这一点:
\[(?:[a-z]|(?R))*\]
https://regex101.com/r/Al0jny/1
对于re
,您必须手动尝试匹配可能的嵌套级别,例如:
\[(?:[a-z]|\[[a-z]*\])*\]
答案 1 :(得分:0)
我认为这取决于输入。但是,根据您引用的链接上的输入,也许可以帮上忙。
(\d+)|(\[[a-z]\])|(\[[a-z]+\])|([a-z]+)
https://regex101.com/r/RRTLIU/1
或者,如果您想忽略方括号,则可以使用以下regex
:
(\d+)|\[([a-z])\]|\[([a-z]+)\]|([a-z]+)