質問するログイン新規登録

回答編集履歴

2

追記

2019/09/22 14:29

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -4,4 +4,17 @@
4
4
  > 文字列としてのバックスラッシュとしては認識されないのはなぜでしょうか?
5
5
 
6
6
  文字列としてのバックスラッシュとして認識されています。
7
- 前段に書いたとおり、本来なら `\.` と書かねばならんのです。
7
+ 前段に書いたとおり、本来なら `\.` と書かねばならんのです。
8
+
9
+ 余談
10
+ ---
11
+ Pythonの仕様上、実は `.` でも通ります。
12
+ しかしこれは例外的な挙動なので、あまり頼らない方が良いでしょう。
13
+
14
+ `'\.' == '.'` が True になるなんて、直感的じゃ無いですよね。
15
+
16
+ > 標準の C とは違い、認識されなかったエスケープシーケンスはすべて、そのまま文字列中に残ります。すなわち、バックスラッシュも結果中に残ります。(この挙動はデバッグの際に便利です: エスケープシーケンスが誤入力されたら、その出力結果が失敗しているのが分かりやすくなります。) 文字列中でのみ認識されるエスケープシーケンスは、バイト列リテラルには、認識されないエスケープシーケンスとして分類されるので注意してください。
17
+
18
+ > バージョン 3.6 で変更: 認識されないエスケープシーケンスには DeprecationWarning が出ます。将来どこかのバージョンの Python で、認識されないエスケープシーケンスは SyntaxError になるでしょう。
19
+
20
+ **引用元**: [2. 字句解析 - 文字列およびバイト列リテラル — Python 3.7.4 ドキュメント](https://docs.python.org/ja/3/reference/lexical_analysis.html#string-and-bytes-literals)

1

追記

2019/09/22 14:29

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,2 +1,7 @@
1
1
  Pythonの文字列におけるエスケープ、正規表現としてのエスケープ、その二段階が必要なのです。
2
- raw文字列リテラルを使わないならば、本来 `\\`や`\.`と書かねばなりません。
2
+ raw文字列リテラルを使わないならば、本来 `\\`や`\.`と書かねばなりません。
3
+
4
+ > 文字列としてのバックスラッシュとしては認識されないのはなぜでしょうか?
5
+
6
+ 文字列としてのバックスラッシュとして認識されています。
7
+ 前段に書いたとおり、本来なら `\.` と書かねばならんのです。