2012-05-17 35 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