匹配字串中的嵌套括號可能是一項具有挑戰性的任務,尤其是使用正規表示式(regex)。考慮以下 Python 程式碼:
<code class="python">import re p = re.compile('\(.+\)') str = '(((1+0)+1)+1)' print(p.findall(str))</code>
此程式碼嘗試使用單一正規表示式模式來匹配變數 str 中所有類似數學表達式的字串。然而,它只匹配整個表達式,即使目標是識別單一嵌套括號。
正規表示式模式處理巢狀結構的能力有限且有效地。表達式 (. ) 符合括號內的任何字串,但它無法區分不同的嵌套層級。因此,它將所有內容分組在最外面的括號內,並忽略內部的括號。
為了克服正規表示式的限制,我們可以利用一個名為pyparsing 的更高級的函式庫,它提供了一個專門的解析器來處理複雜的字串模式。以下是一個使用 pyparsing 的範例:
<code class="python">import pyparsing thecontent = pyparsing.Word(pyparsing.alphanums) | '+' | '-' parens = pyparsing.nestedExpr('(', ')', content=thecontent)</code>
此程式碼定義了兩個元素:thecontent,表示單一字元或算術運算符,以及 parens,定義嵌套括號結構。
讓我們用一個例子來示範這個解:
<code class="python">res = parens.parseString("((12 + 2) + 3)") print(res.asList())</code>
[[['12', '+', '2'], '+', '3']]
以上是正規表示式可以處理巢狀括號嗎?探索限制和 pyparsing 解決方案。的詳細內容。更多資訊請關注PHP中文網其他相關文章!