正規表現に関するチュートリアルに従っています。次の手順を実行するとエラーが発生します。
regex = r'(+|-)?\d*\.?\d*'
どうやら、Pythonは(+ |-)が好きではありません。何が問題なのですか?
また、正規表現の前にrを追加しない場合の問題は何でしょうか?
+
特殊文字です。括弧を使用して文字の範囲を指定できます。これは、この場合、パイプ文字で「または」を使用するよりも優れています。
regex = r'([+-])?\d*\.?\d*'
それ以外の場合は、元のバージョンでエスケープする必要があります。
regex = r'(\+|-)?\d*\.?\d*'
を使用することr
は、Python で正規表現文字列を指定するための推奨される方法です。これは、解釈されるべきではない生の文字列を示し、バックスラッシュで実行する必要があるエスケープの量を減らすためです。これは、どこでも見られる単なる python 正規表現イディオムです。
r'(\+|-)?\d*\.?\d*'
#'(\\+|-)?\\d*\\.?\\d*'
通常、「何かの 1 つ以上のインスタンス」を意味するため+
、リテラルを取得するには正規表現でエスケープする必要があります。+
regex = r'(\+|-)?\d*\.?\d*'
そしてr
それを「生の」文字列にします。がないとr
、正規表現のエスケープ シーケンスが文字列のエスケープ シーケンスとして解釈され、さまざまな問題が発生します。(\b
単語境界の代わりにバックスペースであること、およびそのようなこと。)