匹配“ [ab [cd]] fg [hi]]”的python正则表达式

时间:2019-03-15 05:41:19

标签: python regex python-3.x string

s = "[ab[cd]]fg[hi]"

我想获取子字符串[ab[cd]] 问题实际上是可以有任意数量的开括号和闭括号。供参考的this是我要解决的问题。

如果我使用re.search("\[(.*)\]", s),则它与最后一个]匹配

如果我使用re.search("\[(.*?)\]", s),它会停在第一个]

我希望正则表达式匹配字符串{{1}的[ab[cd]]并匹配字符串[ab[cd]]fg[hi]的{​​{1}}

有什么想法吗?

谢谢

2 个答案:

答案 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]+)