2016-11-09 40 views
0

的工作,有沒有辦法把一個正則表達式,如Python的正則表達式,會爲任何類型的支架

\(.*\) 

,並使其正確識別對任何類型的支架,像

(\(|\{|\[).*(\)|\}|\]) 

沒有作出不正確的匹配,如\(.*\]

我特別使用Python,但它應該在任何語言中工作類似。

+0

在大多數情況下,使用'\(。*?\)| {。*?} | \ [。*?]'就足夠了,有或沒有're.S'標誌。 –

+0

你是否也需要照顧嵌套支架? –

+0

@Sebastian Proske理想情況下,我給出了一個簡單的例子來說明,但我希望將其用於一般應用 – TallChuck

回答

2

否。正則語言無法正確處理嵌套。你需要一個適當的解析器。

+0

或爲每種類型的支架創建一個複雜的正則表達式...... – Dekel

0

有沒有什麼神奇的方式來告訴正則表達式匹配一個特定的字符與其他字符(如果是完全相同的字符/字符串,你可以做一個反向引用看,但事實並非如此)。

你可以做的是寫一個「複雜」(沒有這麼多),該表達式:

((?:\(.*\))|(?:\{.*\})|(?:\[.*\])) 
+0

很好,但是很快就會變得非常笨拙 – TallChuck

0
((?:\([^()]*\))|(?:\{[^{}]*\})|(?:\[[^[\]]*\])) 

更笨重,但不像含.*的解決方案,這隻會趕上最裏面的一對括號內的括號。在一對括號之間,一切都是允許的,甚至是換行符,除了括號本身[^{}]

.*是貪心,這將趕2對支架爲一組,如(AB)CD(EF),甚至混亂例如混合對和匹配(AB)CD)

爲了趕上含有對支架等(AB(CD)EF)的基團我考慮與正則表達式不可能的。

+0

是的,我的問題實際上是在我給出這個問題的答案之後得到的啓發:http://stackoverflow.com/questions/40456091/matching-json-with-a-regular-expression/40513632#40513632 – TallChuck