2017-11-01 20 views
0

与えられた単語は含まず、別のパターンと一致する正規表現はありますか?パターンの正規表現だけでなく、単語を否定

私は使用しているパーサーで単語をつかむために、以下のような単純なパターンを持っています。

field = re.compile(r"[a-zA-Z0-9]+") 

パーサは何かが変数や関数であるかどうかを判断することは正常に動作しますが、私はそれがエンドキーワードを使用クロージングコードブロックを、つかむ問題に実行していますよ。

foo = 3 
end if <-- end is a keyword and should not be counted as a variable 

、それが現在の単語エンドを除き一致するすべての単語にマッチする正規表現を更新する方法はありますか?

fooは一致します。

enは一致します。

endが一致する。

endxは一致します。コメント@phylogenesisで

+3

「\ b(?!end \ b)[a-zA-Z0-9] + 'はどうですか? – Phylogenesis

+0

それは私が必要とするように見えます。ありがとう!私は\ bを読む必要があります。 – voodoogiant

答えて

1

は、私は、この正規表現は、あなたの質問に答える理由/方法を説明します作業答え

\b(?!end\b)[a-zA-Z0-9]+ 

を提供します。

鍵は (?!end\b)であり、word boundaries\bが重要なサポート役割を果たしています。

先頭にある\bは、パターンが単語の先頭から一致することを確実にするため、負の先読み(?!end\b)は、単語の最初の3文字がe、n、dの後に単語境界(別名「終わり」という言葉)。この先読みの単語境界は、「忍耐強い」のような言葉を除外しないことを確かめます。