次の Python 正規表現のセマンティクスについて混乱しています。
r"/actors(\\..+)?"
正規表現に関する Python のドキュメント セクションを調べましたが、この表現を理解できませんでした。誰かが私を助けることができますか?
/ # literal /
actors # literal actors
( # starting a subpattern
\\ # (escaped) literal \
. # arbitrary character
.+ # 1 or more arbitrary characters
)? # ends the subpattern and makes it optional
これは、スラッシュ、「アクター」、およびオプションでバックスラッシュと2つ以上の任意の文字に一致することを意味します。
ここにタイプミスがあると思います。文字列が生でマークされていないか、バックスラッシュが1つ多すぎます。どちらの場合も、エスケープされた後に任意の文字が続くのでは.
なく、エスケープされたものがあります。これは、任意のファイル拡張子または欠落しているファイル拡張子\
で呼び出されたファイルと一致します。actors
つまり、"/actors(\\..+)?"
またはr"/actors(\..+)?"
。
\\..+
ここで\\
は、エスケープ\
文字なので、完全に一致します。以下は、任意の文字に一致する可能性のあるものであり、その後に少なくとも1回(またはそれ以上の頻度で)存在する必要がある.
別の文字が続きます。したがって、2文字以上に一致します。また、任意の2文字以上に一致し、先頭に円記号が付きます。.
..+
\\..+
(\\..+)?
すべてがオプションのキャプチャグループ内にあるということは、これもすべて除外できることを意味します。
式がおそらく間違っていることに注意してください。ある種のURLを照合しようとしていて、.
文字によって導入されたファイル拡張子を照合したいように見えます。ただし、\\
生で引用された文字列の内部は文字r" "
と一致し\
、ドット自体をエスケープしません。だからあなたはおそらく欲しいr"/actors(\..+)?"
か"/actors(\\..+)?"
。
これは、文字列/actors
、リテラルを含むオプションのキャプチャグループ、およびリテラル以外が一致するように構成されて.
いるものの1つ以上が続くことを意味します。.