我有一串语法分析的文本:
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)
[]
这个想法是匹配'当'后面没有小写字符,然后匹配'相同'时没有后跟小写字符。
有没有人有更好的方法?
答案 0 :(得分:1)
因此,如果the
和same
之间的所有字符都不是小写字母,那么您希望匹配,以下是在regex中编写该字符的方法:
the[^a-z]*same
请注意,您可能还想添加字边界,因此您不会匹配foothe ... samebar
之类的内容,如下所示:
\bthe\b[^a-z]*\bsame\b