Pythonでテキスト処理を行う際に代表的な構文について、解説していきます。
エスケープ処理
Pythonで文字列を扱う場合は、シングルクォーテーション(‘)かダブルクォーテーション(“)で囲みます。
・文字列内で「”」や「’」、「\」を使用する場合は、「\」を対象の文字列の前に入れエスケープする必要があります。
・r‘ ‘で文字列を定義するとクオーテーション内のエスケープはされずに認識されます。
print("\"こんにちは\"と\n言いました")
# >>> "こんにちは"と
# >>> 言いました
print(r"\"こんにちは\"と\n言いました")
# >>> \"こんにちは\"と\n言いました
文字列のチェック
以下のように対象の文字列のチェックをかけることができます。戻り値はBool値で、以下のサンプルはすべてTrueが返却されます。
# 数字と文字のみ
val = "123abcあいう"
print(val.isalnum())
# 文字のみ
val = "abcあいう"
print(val.isalpha())
# 数字のみ
val = "123"
print(val.isdigit())
# 10進数の数字
val = "123"
print(val.isdecimal())
# すべて小文字
val = "abc"
print(val.islower())
# すべて大文字
val = "ABC"
print(val.isupper())
# 数字を表す
val = "123123"
print(val.isnumeric())
文字列の変換
以下のメソッドでは文字列の変換を行うことができます。
# すべて大文字に変換
val = "HELLO world!"
print(val.upper())
# >>> HELLO WORLD!
# すべて小文字に変換
val = "HELLO world!"
print(val.lower())
# >>> hello world!
# 単語の1文字目を大文字にする
val = "HELLO world!"
print(val.title())
# >>> Hello World!
# 1文字目を大文字にする
val = "HELLO world!"
print(val.capitalize())
# >>> Hello world!
# 大文字小文字を切り替える
val = "HELLO world!"
print(val.swapcase())
# >>> hello WORLD!
# 文字列をoldからnewに置き換える
val = "HELLO world!"
print(val.replace("!", "?"))
# >>> HELLO world?
# 両端から指定文字を削除する
val = " HELLO world!xxx"
print(val.strip(" x"))
# >>> HELLO world!
# 左端から指定文字を削除する
val = "xxHELLO world!"
print(val.lstrip("x"))
# >>> HELLO world!
# 右端から指定文字を削除する
val = "HELLO world! "
print(val.rstrip())
# >>> HELLO world!
その他の文字列メソッド
その他、よく利用される文字列メソッドは以下になります。
# 文字列検索(検索文字、開始位置、終了位置)
val = "hello world!"
print(val.find("l", 5))
# >>> 9
# 文字列を結合する
vals = ["h", "e", "l", "l", "o"]
print("-".join(vals))
# >>> h-e-l-l-o
# 文字列を分解する(デフォは空白文字)
val = "hello world !"
print(val.split())
# >>> ['hello', 'world', '!']
フォーマット
name="太郎"
age=20
# 変数名=値で出力
print(f'{name=}')
# 30文字のうち右寄せで表示
print(f'{name:>30}')
# 変数名=値で出力
print('{}'.format(name))
# 30文字のうち右寄せで表示
print('{a}{b}'.format(a=name,b=age))
reモジュール
reモジュールは正規表現のチェックを行うことができます。.match(正規表現,文字列)や.search()で正規表現に合致した文字列を返し、無ければNoneを返します。
・変数=.compile(正規表現)でreモジュールのオブジェクトも使用できるので郵便番号や電話番号など繰り返し同じ正規表現でチェックをかけたい場合などに有効です。
.group(int)を使用するとマッチした文字列をリスト形式で取得できます
import re
text='tarou'
# searchでは文字列全体の中で一致するかを判定
result=re.search('ar+',text)
print(result.group(0))
# >>> ar
# matchでは先頭から一致しているかを判定
result=re.match('t+',text)
print(result.group(0))
# >>> t
# compileでパターンを定義
pt=re.compile('ou')
result=re.search(pt,text)
print(result.group(0))
# >>> ou
unicodedataモジュール
- unicodedataモジュールでは、.nslookup()やname()でUnicodeで定義された文字や名称を取得することができます。
- .nomalize()を使用すると、大文字から小文字、半角から全角などの変換ができるので、検索時の表記ゆれなどにも対応できたりします。
import unicodedata
# ユニコードの名称から文字を取得
print(unicodedata.lookup("SUSHI"))
# >>> 🍣
# 文字からユニコードの名称を取得
print(unicodedata.name("😊"))
# >>> SMILING FACE WITH SMILING EYES
# 正規化(日本語全角、英数字半角)
val="コンニチハ TARO-です。"
print(unicodedata.normalize('NFKC',val))
# >>> コンニチハ TARO-です。