簡體   English   中英

如何制作僅匹配嵌套括號中間括號的正則表達式?

[英]How can I make a regular expression that only matches the middle bracket of nested brackets?

我試圖做一個正則表達式,僅在有嵌套括號的情況下才匹配中間括號。 例如,如果您輸入x(x + 3(x + 3)),我希望它只匹配(x + 3)。 我的程序中已經有幾個包含括號的正則表達式,並且我發現它們始終與找到的括號的第一個實例匹配。 在上面的示例中,我的正則表達式匹配(x + 3(x + 3),我想這應該很明顯,但是我剛開始時並沒有考慮它。本質上,我希望它與一組括號匹配括號內不包含'('或')'字符。

這是單個括號的正則表達式:re.compile(r'(\\ S +?)')。 我會使用某種否定的環顧四周,但我認為這樣可以避免在開頭和結尾分別使用必要的左括號和右括號。

我正在使用Python。 另外,當我說“括號”時,我指的是括號,但是在英式英語中,我們說的是括號:)

提前致謝!

捕獲不需要其他東西的最簡單方法是

[^ ....] -^禁止[]內部的任何內容-作為一項特殊功能,您無需在其中轉義括號-因此,通過將正則表達式聲明為

r'(\([^()]+\))'

您實質上捕獲了一個文字(在bei 1+后面跟隨任何東西,但沒有(也沒有)后跟一個文字)

參見https://regexr.com/3nsfg

從正則表達式語法

  • 可以通過補充集合來匹配不在范圍內的字符。 如果集合的第一個字符是^ ,則所有不在集合中的字符都將被匹配。 例如, [^5]將匹配'5'以外的任何字符,而[^^]將匹配'^'以外的任何字符。 ^如果不是集合中的第一個字符,則沒有特殊含義。
  • 要在集合中匹配文字']',請在其前面加上反斜杠,或將其放在集合的開頭。 例如, [()[\\]{}][]()[{}]都將與括號匹配。

碼:

t = "x(x+3(x+3))"

import re

m = re.findall(r"(\([^()]+\))", t)

print(m[0])

輸出:

(x+3)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM