DeprecationWarning:無効なエスケープシーケンス-\ dの代わりに何を使用しますか?


106

rePython 3.6.5 でモジュールの問題に遭遇しました。私の正規表現には次のパターンがあります。

'\\nRevision: (\d+)\\n'

しかし、実行するとが表示されDeprecationWarningます。

私はSO問題を検索しましたが、実際には答えが見つかりませんでした-代わりに何を使用すればよい\d+ですか?ちょうど[0-9]+または多分何か?


2
それは問題ではありません、より多くのコードを提供しますか?
Sraw

3
ダブルエスケープ\dまたは使用しr'\\nRevision: (\d+)\\n'ますか?
REVO

回答:


176

Python 3は、文字列リテラルをUnicode文字列として解釈するため\d、エスケープされたUnicode文字として扱われます。

r以下のように、先頭にを追加することにより、RegExパターンを生の文字列として宣言します。

r'\nRevision: (\d+)\n'

これは、エスケープをで\n改行文字として解析するだけなので、エスケープもドロップできることを意味しますre


8
もう少し正確に言う\dと、認識されないエスケープシーケンスとして扱われるため、変更されません。Python 3.6以降、DeprecationWarningが提供されています。Pythonの将来のバージョンでは、SyntaxErrorになります。ドキュメントの「2.4.1。文字列とバイトリテラル」の詳細。
VPfB

@VPfBスレッドは古いですが、同じ問題の答えを探していました。\ dがエスケープされたUnicode文字として扱われる場合、正規表現パターンを生の文字列として扱わずに、d(アルファベット文字)と\ d(数字)をどのように区別しますか?(同じ質問が\ w、\ Wなどに適用されます)
giulia_dnt

2
@theggg私があなたの質問を正しく理解している場合-バックスラッシュをエスケープすると、文字列が読み取られます'\\d'
アカスカリーノ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.