2016-03-06 56 views
1

我正在尋找一個正則表達式,該正則表達式區分包含在括號內的數值的字符串和包含它們之外的字符串。問題是,括號可以被嵌入到對方:可能在多個括號中查找字符串?

因此,例如表達式應該符合以下字符串:

  • 哎(例1)
  • 還(在此(onetoo2(硬)) )
  • 但(在這裏(是(A(硬)之一)maybe23)呵呵)

但它不應該符合以下任何一項:

  • 這(一人),is22misleading
  • 如何(上(去))(多)3parent(heses(大約))

到目前爲止,我已經試過

\ d [A-Za-z] \)

和這樣的容易的事情。這一個問題是,它不匹配的例子2,因爲它有後一個(字符串。

我怎麼能解決這個問題嗎?

+1

對我來說,你正在尋找一個詞法分析器和解析器。 eeg flex和野牛。 – hetepeperfan

+0

在字符串'how(to(go)on)with(multiple)3parent(heses(around))'digit已經被外層'()'包含。你有什麼規則可以區分它嗎?但是(這裏(是(一個(更難)一個)也許23)嘿嘿)?因爲兩者似乎相似。 – 2016-03-06 20:58:46

+0

這兩個問題之間的問題是,第一個包含一個(在數字之後,仍然在原始的括號內)如果它沒有被允許,我的例子已經足夠了,但它是允許的 – Ezze

回答

0

這些類型的正則表達式的並不總是很容易,但有時它的能夠拿出所提供的輸入方式還是有些一致的圖一般像這應該工作:

(.*(\([\d]+[^(].*\)|\(.*[^)][\d]+.*\)).*) 

代碼

import re 

p = re.compile(ur'(.*(\([\d]+[^(].*\)|\(.*[^)][\d]+.*\)).*)', re.MULTILINE) 

result = re.findall(p, searchtext) 
print(result) 

結果

https://regex101.com/r/aL8bB8/1

+0

我認爲這將在'hello(1(world))'上失敗,這應該與OP描述中的匹配。 –

+0

是的,可能,但模式可以適應它。希望他們能從中學到一點......這就是目標。謝謝。 –

相關問題