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

回答編集履歴

4

修正

2019/02/13 08:06

投稿

LouiS0616
LouiS0616

スコア35676

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  > この場合\sでも\sでも同じように動作するため
2
2
 
3
- \sで動作しますか?
3
+ ~~\sで動作しますか?~~ 試してみたところ、動作しますね。
4
4
  ```Python
5
5
  import re
6
6
  re.compile('\s')
@@ -12,6 +12,8 @@
12
12
  re.compile('\s')
13
13
  ```
14
14
 
15
+ **追記:** 警告を例外に見間違えました。とんだ凡ミスです。失礼しました。
16
+
15
17
  ---
16
18
  > ここで疑問なのは、なぜ"\s*[///t]+\s*"とせず、\sとし、\sを打ち消しているのでしょうか?
17
19
 
@@ -42,7 +44,7 @@
42
44
  print('t is ok')
43
45
  ```
44
46
 
45
- **実行結果1** [CPython 3.6.2 @ Wandbox](https://wandbox.org/permlink/gYsbi8o4Zlk7z2df)
47
+ **実行結果** [CPython 3.6.2 @ Wandbox](https://wandbox.org/permlink/gYsbi8o4Zlk7z2df)
46
48
  ```
47
49
  s is ok
48
50
  Traceback (most recent call last):

3

追記

2019/02/13 08:06

投稿

LouiS0616
LouiS0616

スコア35676

answer CHANGED
@@ -32,4 +32,21 @@
32
32
 
33
33
  引用元:[Python 言語リファレンス » 字句解析](https://docs.python.jp/3/reference/lexical_analysis.html#literals)
34
34
 
35
- 便利かこれ...?
35
+ 便利かこれ...?
36
+
37
+ ```Python
38
+ assert '\s' == '\s'
39
+ print('s is ok')
40
+
41
+ assert '\t' == '\t'
42
+ print('t is ok')
43
+ ```
44
+
45
+ **実行結果1** [CPython 3.6.2 @ Wandbox](https://wandbox.org/permlink/gYsbi8o4Zlk7z2df)
46
+ ```
47
+ s is ok
48
+ Traceback (most recent call last):
49
+ File "prog.py", line 4, in <module>
50
+ assert '\t' == '\t'
51
+ AssertionError
52
+ ```

2

追記

2019/02/13 08:03

投稿

LouiS0616
LouiS0616

スコア35676

answer CHANGED
@@ -22,4 +22,14 @@
22
22
 
23
23
  引用元:[Python 標準ライブラリ » re — 正規表現操作](https://docs.python.jp/3/library/re.html)
24
24
 
25
- 『\で\sを打ち消している』のではなく、『\sで\sを表現している』ですかね。
25
+ 『\で\sを打ち消している』のではなく、『\sで\sを表現している』ですかね。
26
+
27
+ assert '\s' == '\s' の謎
28
+ ---
29
+ > 標準の C とは違い、認識されなかったエスケープシーケンスはすべて、そのまま文字列中に残ります。すなわち、バックスラッシュも結果中に残ります。(この挙動はデバッグの際に便利です: エスケープシーケンスが誤入力されたら、その出力結果が失敗しているのが分かりやすくなります。) 文字列中でのみ認識されるエスケープシーケンスは、バイト列リテラルには、認識されないエスケープシーケンスとして分類されるので注意してください。
30
+
31
+ > バージョン 3.6 で変更: 認識されないエスケープシーケンスには DeprecationWarning が出ます。将来どこかのバージョンの Python で、認識されないエスケープシーケンスは SyntaxError になるでしょう。
32
+
33
+ 引用元:[Python 言語リファレンス » 字句解析](https://docs.python.jp/3/reference/lexical_analysis.html#literals)
34
+
35
+ 便利かこれ...?

1

追記

2019/02/13 08:00

投稿

LouiS0616
LouiS0616

スコア35676

answer CHANGED
@@ -20,4 +20,6 @@
20
20
 
21
21
  > 正規表現パターンに Python の raw string 記法を使えばこの問題を解決できます。 'r' を前置した文字列リテラル内ではバックスラッシュを特別扱いしません。従って、 "\n" が改行一文字の入った文字列になるのに対して、 r"\n" は '\' と 'n' という二つの文字の入った文字列になります。通常、 Python コード中では、パターンをこの raw string 記法を使って表現します。
22
22
 
23
- 引用元:[Python 標準ライブラリ » re — 正規表現操作](https://docs.python.jp/3/library/re.html)
23
+ 引用元:[Python 標準ライブラリ » re — 正規表現操作](https://docs.python.jp/3/library/re.html)
24
+
25
+ 『\で\sを打ち消している』のではなく、『\sで\sを表現している』ですかね。