0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

pythonでutf-8の文字コードを使って正規表現で特定の文字(文字コード)が含まれるか判定

Posted at

タイトルの内容を実現しようとした背景から書きます

背景

やりたかったこと

例として、『ゼロ幅スペース』(UTF-8 :「E2 80 8B」)などがファイル中に含まれているかチェックしたかった

“あ”のような通常の文字であれば、ソースコードに書けますが
『ゼロ幅スペース』の場合は書いてしまうと(たとえコメントを書いていても)
わかりにくいと思い、「この文字コードを指定している」と明示しようと
考えた次第です。

それに加えて、入力データ中でチェックしたい文字コードは『ゼロ幅スペース』だけではないと判断できたので、文字コードの範囲を指定して正規表現でチェックをしようと考えました。

なぜ文字コード(utf-8)で指定しようとしたか

想定していない文字コードが文字化けをしたときに、xddコマンドで調べると表示されるのはutf-8のコードだった。

文字化けした
 -> xxdコマンドで原因となる文字コードを特定
  -> utf-8で表示された文字コードをpythonでチェックしたい

ネックになった部分

・utf-8をPythonのコード中で記述する方法がわからなかった
 『ゼロ幅スペース』はunikcodeであれば 「'\u200B'」と書けばいいことはわかった
・正規表現で文字コードを指定する方法がわからなかった

※ 上記2がわからなかったので、いわば「わからないことがわからない」状態で質問をしてしまい、ご迷惑をおかけしましたこと、この場をお借りしてお詫びします。

解決方法

・decode('utf-8')を使ってutf-8の文字コード指定 コードを指定して変数に文字を一旦入力
・上記の変数を正規表現で使うため、compileを使用
 

解決方法(Code)

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import re
import sys

searchstr = "今日の気温は25℃です"

# 正規表現パターンオブジェクトの生成(コンパイル)
str1 =  b'\xe3\x81\x82'.decode('utf-8')  # “あ”
str2 =  b'\xe3\x82\x93'.decode('utf-8')  # “ん”
print(str1)
pattern = re.compile(r'['+str1+'-'+str2+']')
print(pattern)
str1 = 'あ'
# matchメソッドで文字列を検索
print(  pattern.search(searchstr) )
print()

# 正規表現パターンオブジェクトの生成(コンパイル)
str1 =  b'\xe2\x84\x80'.decode('utf-8')  # “℀”
str2 =  b'\xe2\x84\x8F'.decode('utf-8')  # “ℏ”
print(str1)
pattern = re.compile(r'['+str1+'-'+str2+']')
print(pattern)
str1 = 'あ'
# matchメソッドで文字列を検索
print(  pattern.search(searchstr) )

[結果]

あ
re.compile('[あ-ん]')
<_sre.SRE_Match object; span=(2, 3), match='の'>

℀
re.compile('[℀-ℏ]')
<_sre.SRE_Match object; span=(8, 9), match='℃'>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?