![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
下記のような正規表現で「全角カタカナの色名(アルファベットの色名)」で書かれている文字にマッチするものを作りたいのですが、カタカナの濁音にマッチしてくれません。
iro=re.compile("[ァ-ヴー×]+\([A-Z/]+\)|カラーなし")
例
ベリー(BERRY)/ ブラック(BK)/ ブルー(BL)/ フォレスト(FOST)/ グリーン(GN)/ グレー(GY)/ ピンク(PK)/ パープル(PU)/ タンジェリン(TGR)
↓
リー(BERRY)ラック(BK)ブルー(BL)グリーン(GN)グレー(GY)ンク(PK)ープル(PU)タンジェリン(TGR)
このように中途半端にパブべが除かれてマッチします。いったいどういうことなんでしょうか?
No.1ベストアンサー
- 回答日時:
でも書いたのですが、2.xでは、strとunicodeの2種類の文字列があります。
日本語の場合
str: 1文字が複数バイトの文字として扱われます。
unicode: 1文字が1文字として扱われます。
検索パターンをreprで比べると
strでは
'[\xe3\x82\xa1-\xe3\x83\xb4\xe3\x83\xbc\xc3\x97]+\\([A-Z/]+\\)|\xe3\x82\xab\xe3\x83\xa9\xe3\x83\xbc\xe3\x81\xaa\xe3\x81\x97'
(UTF-8の場合)
unicodeでは
u'[\u30a1-\u30f4\u30fc\xd7]+\\([A-Z/]+\\)|\u30ab\u30e9\u30fc\u306a\u3057'
とまったく違うのがわかります。
strでは 「ァ」 は \xe3\x82\xa1 と3文字であり、 「ァ-ヴ」 とやっているつもりで、 実際は「\xa1-\xe3」になっています。
unicodeでは \u30a1 と一文字扱いされています。
検索される側の文字列も同様です。
strでは ベリー が \xe3\x83\x99\xe3\x83\xaa\xe3\x83\xbc となります。 \x99は上の[]内の文字に一致するものはありあせん。パターンに一致するのは \xe3\x83\xaa\xe3\x83\xbc となり、これをUTF-8で解釈すれば リーになります。
また、 \xe3\x83\x99 は unicodeの「ベ」ではないので、パターンだけunicodeにしてもマッチしません。
一般に、日本語を使った正規表現が期待通りに動くのは、パターン、対象文字列ともにunicode文字列のときだけです。
他の言語やツールでも、日本語に対応した方法を使わないと、同様の現象が発生します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- メイク コントロールカラーについて教えて下さい。 1 2022/10/05 23:39
- その他(Microsoft Office) 英数字のみ全角から半角に変換 4 2023/07/28 14:48
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- 運転免許・教習所 免許の帯色について教えてください! 2 2022/05/07 14:39
- Excel(エクセル) EXCELでの文字・数字入力の基本について教えてください。 2 2023/05/29 23:17
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
php初心者ですメールについて教...
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
Excel VBAでPDFファイルをMicro...
-
EXCELからCSVにすると余計なカ...
-
エクセルで数値を全角文字(カ...
-
[VBScript]バイト長の判定
-
全角/半角キーをSendkeys関数で...
-
全角英数字の必要性が理解できない
-
住宅にカナを入力する際に丁目...
-
VBA EXCEL あるセルの中の一...
-
メールのcsv添付ファイルの種類...
-
VBAで「,」⇒「.」へ置換後、タ...
-
全角入力
-
VBA 置換文字がみつからない時
-
全角スペース
-
プログラミングでは、半角括弧...
-
perl 初めてのプログラムにエラ...
-
ACCESS VBA でのバイナリデー...
-
○文字目に文字挿入
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正規表現 URL抽出「 [\\/\\b]{0...
-
シェルスクリプト [[ $number =...
-
正規表現について VB6
-
正規表現について
-
日本語環境下でのバックスラッ...
-
正規表現で2種類ある括弧を区別...
-
perlの正規表現で量指定子を繰...
-
perl初心者です。
-
言語ではなく、正規表現のみで...
-
正規表現の展開
-
正規表現
-
正規表現について教えてください
-
正規表現が解読できません。
-
pythonの正規表現、全角カタカ...
-
行末の正規表現について。
-
正規表現。行頭が○○以外にマッ...
-
配列内の要素をパターンマッチする
-
置き換えについて
-
【GVimの正規表現における検索...
-
「?」が含まれるマッチについて
おすすめ情報