🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

27807閲覧

【Django / Python / 正規表現】PEP8: invalid escape sequence '\d' と出るのを解決したいです。

azuapricot

総合スコア2341

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/10/24 03:04

編集2019/10/24 04:06

いつもお世話になっております。

早速本題に入らせていただきます。

現在、Django と Python を使用してWebアプリケーションを制作中なのですが、
日付の入力チェック を実装しようとして少し躓きました。

以下が現在のコードとなります。


Python

1# form.py 2 3class TestForm(forms.Form): 4 date_format = '(\d{4})/(\d{1,2})/(\d{1,2})$' #ここにPEP8の警告が出ます 5 word_date_start = '開始日' 6 date_format_err = '{0}にはyyyy/MM/dd形式で入力してください。' 7 8 date_start = forms.CharField(label='開始日', required=False) 9 10 def clean_date_start(self): 11 date_start = self.cleaned_data['date_start'] 12 if self.data: 13 try: 14 result = re.compile(self.date_format).match(date_start).group(0) 15 except: 16 raise forms.ValidationError(self.date_format_err.format(self.word_date_start))

コード上に表示される警告文

PEP8: invalid escape sequence '\d'

正規表現でのフォーマットチェック自体は問題なく動作 しているのですが、
この謎の警告文だけがどうしても解決できません。

お時間ある方で解決方法等ご存知の方いらっしゃいましたらご助力頂けますと幸いです。


BA回答を受けて修正したコード

回答通り raw文字列 にすることで警告文が消えて問題なくフォーマットチェックができました!
ありがとうございました!

Python

1date_format = r"(\d{4})/(\d{1,2})/(\d{1,2})$"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

pythonで文字列中に\を入れると、続く文字列と合わせてpythonのエスケープシーケンスと解釈されます。\nとかを思い浮かべていただくと良いかと思います。

ただし、\dのような場合ですと、対応するエスケープシーケンスはありません。こういうとき、pythonは\dであるとみなします。これはこれで(多くの場合は)ちゃんと意図した結果になるのですが、あまりお行儀の良い書き方ではないので何かと警告が出ます(lintツールなどから)。

"(\d{4})/(\d{1,2})/(\d{1,2})"と書く代わりに、"(\d{4})/(\d{1,2})/(\d{1,2})"と書くか、raw文字列にするか(r"(\d{4})/(\d{1,2})/(\d{1,2})"のように)のどちらかを選択してください。

2. 字句解析 — Python 3.8.0 ドキュメント

投稿2019/10/24 03:25

編集2019/10/25 07:36
hayataka2049

総合スコア30935

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

azuapricot

2019/10/24 04:04

raw文字列にしたところ、警告文も消えて、フォーマットチェックもきちんと正常に機能することが確認できました! とても詳しく解説して頂きありがとうございます!! 助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問