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

回答編集履歴

2

修正

2019/02/14 07:14

投稿

LouiS0616
LouiS0616

スコア35676

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  > 最初のu''で文字列をunicode(日本語)として解釈しているはず
2
2
 
3
3
  誤解されていることがいくつか。
4
- - uプレフィックスでユニコード指定されているのは**正規表現文字列自体**であって、探索対象の文字列がユニコードであるか限りません。そのために (?u) を付与していると思われます。
4
+ - uプレフィックスでユニコード指定されているのは**正規表現文字列自体**であって、~~探索対象の文字列がユニコードであるか限りません~~ ユニコードの規則に基づいたマッチングを保証するものではありません。そのために (?u) を付与していると思われます。
5
5
  - Python3.x以降では、uプレフィックスは不要です。これはPython2.7の仕様の残骸です。**(出典1)**
6
6
  - Python3.x以降では、正規表現に依る文字列の探索はデフォルトでユニコードなので、(?u) は不要です。これはPython2.7の仕様の残骸です。**(出典2)**
7
7
 

1

追記

2019/02/14 07:14

投稿

LouiS0616
LouiS0616

スコア35676

answer CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  誤解されていることがいくつか。
4
4
  - uプレフィックスでユニコード指定されているのは**正規表現文字列自体**であって、探索対象の文字列がユニコードであるか限りません。そのために (?u) を付与していると思われます。
5
- - Python3.x以降では、uプレフィックスは不要です。これはPython2.7の仕様の残骸です。
5
+ - Python3.x以降では、uプレフィックスは不要です。これはPython2.7の仕様の残骸です。**(出典1)**
6
- - Python3.x以降では、正規表現に依る文字列の探索はデフォルトでユニコードなので、(?u) は不要です。これはPython2.7の仕様の残骸です。
6
+ - Python3.x以降では、正規表現に依る文字列の探索はデフォルトでユニコードなので、(?u) は不要です。これはPython2.7の仕様の残骸です。**(出典2)**
7
7
 
8
8
  依って、Python3.xならば次のように書けば充分です。
9
9
  ```Python
@@ -14,4 +14,16 @@
14
14
 
15
15
  結論
16
16
  ---
17
- 書籍が古いのでは。
17
+ 書籍が古いのでは。
18
+
19
+ 出典
20
+ ---
21
+ **出典1**
22
+ > Python 3.3 では文字列リテラルへの "u" 前置を再びサポートすることにしました。この前置は Python 3 自身では何らの意味も持ちはせず、Python 3 への移行において純粋な機械的変更を要する事項を単に減らすためだけのために提供されます。
23
+
24
+ 引用元:[What's New In Python 3.3 » 明示的なユニコードリテラル](https://docs.python.org/ja/3/whatsnew/3.3.html#pep-414-explicit-unicode-literals)
25
+
26
+ **出典2**
27
+ > 後方互換性のため、re.U フラグ (と同義の re.UNICODE および埋め込みで使用する (?u)) はまだ存在しますが、Python 3 では文字列のマッチがデフォルトで Unicode (そしてバイト列では Unicode マッチングが扱えない) なので冗長です。
28
+
29
+ 引用元:[Python 標準ライブラリ » モジュールコンテンツ](https://docs.python.org/ja/3/library/re.html#re.A)