Python正则表达式,两个负面的前瞻性陈述

时间:2012-05-17 21:13:50

标签: python regex negative-lookahead

我有一串语法分析的文本:

 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)
 []

这个想法是匹配'当'后面没有小写字符,然后匹配'相同'时没有后跟小写字符。

有没有人有更好的方法?

1 个答案:

答案 0 :(得分:1)

因此,如果thesame之间的所有字符都不是小写字母,那么您希望匹配,以下是在regex中编写该字符的方法:

the[^a-z]*same

请注意,您可能还想添加字边界,因此您不会匹配foothe ... samebar之类的内容,如下所示:

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