前提
SQLite3で商品情報のデータベースを作成しています。
DB Browser for SQLiteのSQL実行でテーブルを操作しようとしています。
実現したいこと
商品名の中に個数が記載されているものを正規表現でマッチし、数字として別の列に切り出したいです。
「電球 5個セット」→「5」
「パソコン20台セット」→「20」
追記
抽出したい文字列:「1~3桁数字 + 1~2桁単位 + セット」
PostgreSQLにあるような、regexp_matches関数(正規表現パターンマッチの結果捕捉された全ての部分文字列のテキスト配列を返す関数)のような機能を求めています。
発生している問題・エラーメッセージ
SQLのWHERE句に正規表現を使用可能なことは調べたのですが、SELECT句に記載すると列名と認識されてマッチ文字列が取り出せません。
列名が「商品名 REGEXP [0-9]{1,3}.{1,3}セット」となります。
該当のソースコード
SQL
1SELECT *,商品名 REGEXP '[0-9]{1,3}.{1,3}セット' 2FROM base_table 3WHERE 商品名 REGEXP '[0-9]{1,3}.{1,3}セット'
試したこと
「正規表現 マッチ結果 sqlite3」
「正規表現 切り出し SQLite3」
等で検索しましたが、切り出すためのコマンド等は見つかりませんでした。
Python側で一行ずつ抜き出して文字列処理する必要があるのでしょうか?
追記
GLOB句、substrとinstrを調べてみましたが、数字と単位の桁数の組み合わせは指定できませんでした
抽出したい文字列:「1~3桁数字 + 1~2文字単位 + セット」
補足情報(FW/ツールのバージョンなど)
DB Browser for SQLite 3.12.2
Python3.9
(MySQLへの移行は設定時にエラーが出て頓挫しました)
解決した方法
Python側で処理しました。
Pandasで読み込んで、.str.extractで切り出して、不要な列はDropしました
Python
1 # ○個セットを一時的な列に切り出し 2 append_df['set_str'] = append_df['商品名'].str.extract('(?P<set_str>\*[0-9]{1,3}.{0,3}セット)', expand=True) 3 # ○の切り出し 4 append_df['セット数'] = append_df['set_str'].str.extract('(?P<セット数>[0-9]{1,3})', expand=True) 5 # ○個セットの列のDrop 6 append_df.drop('set_str', axis=1,inplace=True)

回答1件
あなたの回答
tips
プレビュー