Pythonで文字列から英字のみを抽出する2つの方法
実際のデータには、英字・数字・特殊文字が混在していることがよくあります。その中から英字だけを抽出したい場合、Pythonではいくつかの方法が利用できます。本記事では、代表的な2つの手法——isalpha()メソッドを使う方法と、正規表現を使う方法——を、具体的なコード例とともにわかりやすく解説します。
isalpha()メソッドを使う方法
isalpha()は、対象の文字がアルファベットかどうかを判定する関数です。forループで文字列から1文字ずつ取り出し、それぞれがアルファベットかどうかをチェックします。そしてjoin()メソッドによって、条件を満たす文字だけを結果として連結します。
コード例
stringA = "Qwer34^&t%y"
# 対象の文字列
print("Given string : ", stringA)
# 英字のみを抽出
res = ""
for i in stringA:
if i.isalpha():
res = "".join([res, i])
# 結果を出力
print("Result: ", res)
実行結果
上記のコードを実行すると、次のような出力が得られます。
Given string : Qwer34^&t%y Result: Qwerty
正規表現を使う方法
正規表現モジュールreのfindall()関数を利用すると、より簡潔に英字だけを抽出できます。「英字のみ」を表すパターン[a-zA-Z]+を指定することで、文字列中のすべての英字を一度に取得可能です。
コード例
import re
stringA = "Qwer34^&t%y"
# 対象の文字列
print("Given string : ", stringA)
# 英字のみを抽出
res = "".join(re.findall("[a-zA-Z]+", stringA))
# 結果を出力
print("Result: ", res)
実行結果
上記のコードを実行すると、次のような出力が得られます。
Given string : Qwer34^&t%y Result: Qwerty
2つの方法の違いと使い分け
isalpha()はUnicodeに対応しているため、ひらがなや漢字なども「アルファベット(文字)」として判定されます。一方、正規表現の[a-zA-Z]は半角英字のみにマッチします。日本語を含む文字列を扱いたい場合は前者、半角英字だけを厳密に抽出したい場合は後者を選ぶとよいでしょう。また、正規表現の方がコードが短く済むため、簡潔さを重視する場面でもおすすめです。
-
Pythonで文字列から特定の文字を削除する方法【replace・正規表現・translate】
replace()メソッドで文字を削除する基本の方法Pythonの文字列(str型)には、部分文字列を別の文字列へ置き換えるためのreplace()メソッドが用意されています。削除したい文字を空文字列()に置き換えることで、その文字を取り除くことができます。>>> Hello people.replace(e, ) Hllo popl正規表現(re.sub)で複数の文字を一度に削除する1行のコードで複数種類の文字をまとめて削除したい場合は、正規表現モジュール re を使うのがおすすめです。削除したい文字を「|」(OR条件)で区切って指定し、re.sub(置換対象パターン, 置
-
Pythonで文字列から数字を抽出する方法【isdigitと正規表現の使い分け】
正の整数だけを抽出するシンプルな方法文字列に含まれる正の整数だけを取り出したい場合は、split()で空白ごとに文字列を分割し、isdigit()で各要素が数字のみで構成されているかを判定する方法が手軽です。>>> s = h3110 23 cat 444.4 rabbit 11 2 dog >>> [int(x) for x in s.split() if x.isdigit()] [23, 11, 2]この方法では、すべてが数字で構成された要素だけが整数に変換されてリストに追加されます。そのため「h3110」のように文字と数字が混ざった語句や、「444.