■ はじめに
https://dk521123.hatenablog.com/entry/2019/09/01/000000
の続き。 今回は、より実践的なサンプル集。
目次
【1】電話番号 例1:電話番号の各要素を抽出 例2:電話番号の判定 【2】名前から姓名を抽出 【3】パターンと一致しているファイル名かどうか判定 【4】JDBCの各パーツの抽出 【5】ファイル名からファイル日付を抽出 補足1:(?P<name>...) について 補足2:スクレイピングでの利用
【1】電話番号
例1:電話番号の各要素を抽出
import re match_result = re.match( r'(\d+)-(\d+)-(\d+)', '03-1234-5678') print(f'match_result(0) = {match_result.group(0)}') print(f'match_result(1) = {match_result.group(1)}') print(f'match_result(2) = {match_result.group(2)}') print(f'match_result(3) = {match_result.group(3)}')
出力結果
match_result(0) = 03-1234-5678 match_result(1) = 03 match_result(2) = 1234 match_result(3) = 5678
例2:電話番号の判定
import re # あくまで例です、、、 tel_pattern = r"^\d{2,5}-\d{1,4}-\d{4}" # Tokyo if (re.search(tel_pattern, "03-1234-5678")): print("Hit") else: print("...") # Kyoto if (re.search(tel_pattern, "075-123-4567")): print("Hit") else: print("...") # Tochigi if (re.search(tel_pattern, "0282-12-4567")): print("Hit") else: print("...") # Izu-Oshima if (re.search(tel_pattern, "04992-1-4567")): print("Hit") else: print("...") # Error if (re.search(tel_pattern, "1-22222-4567")): print("Hit") else: print("...")
【2】名前から姓名を抽出
import re match_result = re.match( r'(?P<first_name>\w+) (?P<last_name>\w+)', 'Steve jobs') print(f'match_result(0) = {match_result.group(0)}') first_name = match_result.group('first_name') print(f'match_result(first_name) = {first_name}') last_name = match_result.group('last_name') print(f'match_result(last_name) = {last_name}')
出力結果
match_result(0) = Steve jobs match_result(first_name) = Steve match_result(last_name) = jobs
【3】パターンと一致しているファイル名かどうか判定
import re # re.search("パターン", "対象文字列") if (re.search("hello[_-]\d+.csv", "hello_20201120.csv")): print("Hit") else: print("...") if (re.search("hello[_-]\d+.csv", "hello-20201120.csv")): print("Hit") else: print("...") if (re.search("hello[_-]\d+.csv", "hello-20201120.txt")): print("Hit") else: print("...") # 1文字(s)がある場合とない場合があるとき if (re.search("Word[s]?_\d+.csv", "Word_20201120.csv")): print("Hit") else: print("...") if (re.search("Word[s]?_\d+.csv", "Words_20201120.csv")): print("Hit") else: print("...") # 数字桁数の指定(^ : 行頭(行の先頭)を表す) if (re.search(r"^\d{8}_\d{2}_\d{4}", "20240907_01_0000")): print("Hit") else: print("...") if (re.search(r"^\d{7}_\d{2}_\d{4}", "20240907_01_0000")): print("Hit") else: print("...")
出力結果
Hit Hit ... Hit Hit Hit ...
【4】JDBCの各パーツの抽出
import re connection_url = "jdbc:redshift://localhost:5432/sample_db" results = re.findall(r'jdbc:(\S+)://(\S+):(\d+)/(\S+)$', connection_url) print(results) print(results[0][0]) print(results[0][1]) print(results[0][2]) print(results[0][3])
出力結果
[('redshift', 'localhost', '5432', 'sample_db')] redshift localhost 5432 sample_db
【5】ファイル名からファイル日付を抽出
import re sample_file_name = "data_file_20220105.csv" REGEX_DEMO = re.compile(r"_(?P<file_date>[\d]+).csv") match = REGEX_DEMO.search(sample_file_name) if match: file_date = match.group("file_date") print(f"file_date is {file_date}") else: print("not match...")
補足1:(?P...) について
* 以下のAPI仕様の「(?P<name>...)」を参照。
https://docs.python.org/ja/3/library/re.html
補足2:スクレイピングでの利用
* 以下の動画で、スクレイピングで利用している
https://youtu.be/OEvD9gSWf20?t=1288
関連記事
Python ~ 基本編 / 正規表現 ~
https://dk521123.hatenablog.com/entry/2019/09/01/000000
Python 基本編 / 文字列
https://dk521123.hatenablog.com/entry/2019/10/12/075251
正規表現 全般
https://dk521123.hatenablog.com/entry/2011/09/10/235712