0

構文解析されたテキストの文字列があります。

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

「同じ」を s に一致させたいと思います。「the」と「same」は、構文マークアップ ((、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)
 []

小文字が続かない場合は「the」に一致し、小文字が続かない場合は「same」に一致するという考え方です。

誰もがより良いアプローチを持っていますか?

4

1 に答える 1

1

したがって、との間のすべての文字が小文字でない場合に一致させる必要thesameあります。これを正規表現で記述する方法は次のとおりです。

the[^a-z]*same

単語の境界も追加したい場合があるので、のようなものとは一致しないことに注意してください。これは次のようfoothe ... samebarになります。

\bthe\b[^a-z]*\bsame\b
于 2012-05-17T21:21:49.393 に答える