質問: Pythonの正規表現を否定する正規表現 Pythonメタキャラクタ否定。 ネットを精練し、いくつかの異なる構文を書いた後、私はアイデアがありません。 いくつかのファイルの名前を変更しようとしています。彼らはタイトルの年を持っています。 [2002]。 括弧はありませんが、私はそれを修正したいのです。 だから私は`(^ [\ d4 ^])`のようなものに見える正規表現を見つけようとしています。しないでくださいそれらの周りに大括弧があります。私は `[\ 1]` のような名前を使用して名前を変更できるように、これをバインドするために角括弧を使用しています。
回答: パターンの周りを確認したい場合は、 *lookahead* と *lookbehind* アサーションを使用できます。これらは試合の一部を構成するものではありませんが、あなたの周りに見つける(または見つからない)と思われるものを言います。 角括弧が必要ないので、*負の*見栄えと先読みを使用する必要があります。 A negative lookahead looks like this `(?!...)` where it matches if `...` does not come next. Similarly a negative lookbehind looks like this `(? and matches if `...` does not come before.` `私たちの例は、 `\` でエスケープする必要があるので、正規表現で意味を持つ ``]と[`]` >。 そこで、次のようなパターンを構築できます。 * A negative lookbehind for `[` - `(?` `* Four digits - `\d{4}` * A negative lookahead for `]` - `(?!\])`` `これは私たちに次のPythonコードを与えます: ``` >>> import re >>> r = re.compile("(?>> r.match(" 2011 ") >>> r.search(" 2011 ") <_sre.SRE_Match object at 0x10884de00> >>> r.search("[2011]") ``` 名前を変更するには、 `re.sub` a>または `sub` 関数を使用します。それを動作させるには、グループとしてマークするために年内に追加のブラケットセットを追加する必要があります。 [また、置き換えを指定するときにグループを `\ 1` として参照するので、 `\` をエスケープしたり、生の文字列を使用したりする必要があります。 ``` >>> r = re.compile("(?>> name = "2011 - This Year" >>> r.sub(r"[\1]",name) '[2011] - This Year' `````