【Python】文字列からアルファベットのみを抽出する方法
こんにちは、にわこまです。
今回は、pythonで文字列からアルファベットのみを抽出する方法を紹介します。日本語とアルファベットが混ざっている文字列や数字とアルファベットが混ざっている文字列に使うことができます。
誤字脱字や分からない点がござましたらご連絡お願いいたします。
スポンサードサーチ
文字列からアルファベットのみを抽出する方法
「re.sub(r”[^a-zA-Z]”, “”, 文字列)」
「re.sub(r”[^a-zA-Z]”, “”, 文字列)」を使うことで文字列からアルファベットのみを抽出することができます。
使い方
使い方を以下のコードに示します。
import re
s = "私はpythonistです"
result = re.sub(r"[^a-zA-Z]", "", s)
print(result)
# 実行結果
pythonist
コードの解説をします。
「re.sub(第1引数, 第2引数, 第3引数)」は、文字列を置換する関数です。第1引数に置換前の文字列、第2引数に置換後の文字列、第3引数に対象の文字列を代入します。
第1引数の[a-z]は小文字のa~zを表し、[A-Z]は大文字のA~Zを表しています。つまり、「[a-zA~Z]」でアルファベット全てを表しています。
さらに、「^」を先頭につけることで、「それ以外」という意味を付け加えることができます。つまり「[^a-zA-Z]」で、アルファベット以外の文字列という意味になります。
第2引数の「””」は、空欄を表しています。つまり、今回の場合は対象の文字列を削除する役割になっています。
第3引数には、アルファベット以外の文字列を空欄に置換する文字列を代入します。
デメリット
「re.sub()」には、複数の単語を1つの単語として抽出するというデメリットがあります。デメリットの例を以下のコードに示します。
import re
s = "私はPythonistでありEnginieerです"
result = re.sub(r"[^a-zA-Z]", "", s)
print(result)
# 実行結果
PythonistEnginieer
「私はPythonistでありEnginieerです」という文字列から「Pythonist」と「Engineer」を抽出したい場合は「re.findall()」を使用します。
使い方を以下のコードに示します。
import re
s = "私はPythonistでありEnginieerです"
result = re.findall(r"[a-zA-Z]+", s)
print(result)
# 実行結果
['Pythonist', 'Enginieer']
コードの解説をします。
「re.findall(第1引数, 第2引数)」は、特定のパターンにマッチする文字列を抽出する関数です。第1引数に特定のパターン、第2引数に対象の文字列を代入します。
第1引数の[a-z]は小文字のa~zを表し、[A-Z]は大文字のA~Zを表しています。つまり、「[a-zA~Z]」でアルファベット全てを表しています。
さらに、「+」を最後尾につけることで、「1回以上繰り返す」という意味を付け加えることができます。つまり「[a-zA-Z]+」でアルファベットを1回以上繰り返す文字列という意味になります。
まとめ
今回は、文字列からアルファベットのみを抽出する方法を紹介しました。言い換えれば、文字列からアルファベット以外の文字列を削除する方法を紹介しました。改めて方法を示します。
「re.sub(r”[^a-zA-Z]”, “”, 文字列)」
含まれるアルファベット(英単語)が1つの場合は「re.sub()」を使う。
「re.findall()」
含まれるアルファベット(英単語)が2つ以上の場合は「re.findall()」を使う。
本サイトでは、pythonに関する悩みを受け付けています。pythonに関する悩みがあれば、メールまたはtwitterのDMまでご連絡ください。
最後までお読みいただきありがとうございます。
スポンサードサーチ