使用正規表示式符合巢狀括號
處理包含巢狀括號的字串時,使用正規表示式進行比對可能具有挑戰性。雖然提供的程式碼使用 re.findall() 成功匹配最外層表達式,但無法捕獲嵌套表達式。
為什麼正規表示式無法達到
由於其扁平性質,正則表達式在處理嵌套結構時本質上受到限制。它們缺乏遞歸或回溯的概念,這對於解析嵌套括號等複雜結構至關重要。
更好的解決方案:Pyparsing
而不是使用正規表示式對於這項任務,更好的選擇是利用Pyparsing,這是一個專門為解析嵌套語法結構而設計的函式庫。 Pyparsing 提供了nestedExpr() 函數,它允許我們定義可以處理嵌套結構的語法。
以下程式碼片段示範如何使用Pyparsing 來配對和解析巢狀括號:
<code class="python">import pyparsing # Define the elements of the expression thecontent = pyparsing.Word(pyparsing.alphanums) | '+' | '-' # Define the nested expression grammar parens = pyparsing.nestedExpr('(', ')', content=thecontent)</code>
現在,您可以使用parens 來解析包含巢狀括號的字串:
<code class="python">res = parens.parseString("((12 + 2) + 3)")</code>
輸出:
[ [['12', '+', '2'], '+', '3'] ]
輸出是一個巢狀列表,其中每個內部列表表示已解析表達式的一部分。
結論
雖然正規表示式對於某些字串操作任務很有用,但在處理複雜的嵌套時存在局限性結構。在這種情況下,Pyparsing 提供了針對這些場景量身定制的更全面的解決方案。
以上是如何匹配字串中的嵌套括號:正規表示式與 Pyparsing的詳細內容。更多資訊請關注PHP中文網其他相關文章!