やや複雑な文字列の抽出の際に便利なのがreモジュール。
返り値がオブジェクトになる点で最初戸惑ったのでまとめておく。
reモジュールとは
Pythonの標準モジュール。インストール不要で利用可能。
文字列を正規表現で抽出したりできる。
文字列の先頭や末尾、部分や全文など対象を選ぶメソッドが多くある。
search関数
text = "a cat loves fish."
re.search("cat", text)
# <re.Match object; span=(2, 5), match='cat'>
注意するのは、戻り値が抽出した部分ではなく「マッチオブジェクト」というオブジェクトになって返ってくる所。
text = "a cat loves fish. my cat loves meat."
string = re.search("cat", text)
print(string)
print(string.groups())
# <re.Match object; span=(2, 5), match='cat'>
# cat
生成したマッチオブジェクトを変数などに代入し、メソッドを使うことでメソッドに合わせたデータを取り出すことができる。
例えばgroupメソッドには引数が備えてあり、数値を入れることでグループの中から指定したデータを抽出できる。
省略した場合は0の指定とみなし、すべてのマッチした要素を出力する。
if文でのsearch関数
import pandas as pd
df = pd.DataFrame(
data={'col1': ['aaa', 'aaabbb', 'bbbccc', 'ddd']})
strings = df['col1']
strings
# 0 aaa
# 1 aaabbb
# 2 bbbccc
# 3 ddd
# Name: col1, dtype: object
列データをリストに格納し、マッチした場合はその文字列を入れ、しない場合は「マッチしない」を返すものを作る。
for string in strings:
target = re.search('bbb', string)
if target:
print(target.group())
else:
print('No match')
# No match
# bbb
# bbb
# No match
マッチしない場合はNoneが返ってくる。