2012-05-17 65 views
0

我有語法解析文本字符串:Python的正則表達式,兩個負前瞻陳述

s = 'ROOT (S (VP (VP (VB the) (SBAR (S (NP (DT same) (NN lecturer)) (VP (VBZ says)' 

我想匹配「同」爲s。它的關鍵是「的」和「同」只有當語法標記(分離即(,NP,S等)所以,「同」不應該覺得在S2匹配匹配:

s2= 'ROOT (S (VP (VP (VB the) (SBAR (S (NP (DT lecturer) (NN same)) (VP (VBZ says)' 

我已經嘗試了雙重否定前向斷言無濟於事:

>>>rx = r'the(?![a-z]*)same(?![a-z]*)' 
>>>re.findall(rx,s) 
[] 

的想法是match'the」不跟時小寫字母,然後匹配‘相同’時,不跟小寫字符

有沒有人有更好的方法?

+1

正則表達式不擅長解析嵌套結構。由於您似乎不關心嵌套,因此您的具體示例可能已足夠。 –

+0

對,嵌套結構不是問題。當試圖將'相同'與字符串'ABCD123sameEFG456' – Renklauf

回答

1

所以,你想匹配,如果所有thesame之間的字符不是小寫字母,這裏是你可以寫在正則表達式:那你可能要添加單詞邊界以及

the[^a-z]*same 

注,所以你不匹配類似foothe ... samebar,那應該是這樣的:

\bthe\b[^a-z]*\bsame\b 
+0

匹配時,也會出現同樣的問題。我實際上最初嘗試過類似的東西,但是我一定錯誤地在某個地方打錯了字。無論如何,謝謝! – Renklauf