質問: data["商品名"].str.replace(" 正規表現 ", "あらびきソーセージ") ``` どのような正規表現をかけば、全てあらびきソーセージに変更できるのでしょうか?? よろしくお願いいたします。
回答: サンプルコードの項番1のように、特定の文字列を部分的に含む商品名を置換したいだけならば、1行のコードで置換することができます。 サンプルコードの項番2のように、正規表現を使いたい場合は`re.sub`で置換することができます。 `r"\g<1>"`はグループ番号を表し、1つ目の引数で(括弧)でくくられたグループに該当する文字列を意味します。 サンプルコードの項番3のように、pandas.DataFrameの要素を正規表現で置換したい場合は、`replace`の`regex`引数をTrueにすることで置換することができます。 こちらは質問文でpandasを使っていると推測されたので書き足しています。pandasをpip installしていないとエラーになります。 ``` items = [ "あらびきソーセージ-135G/6本入り-315円", "あらびきソーセージ-135G/6本入り-345円", "あらびきソーセージ-135G/6本入り-355円", "薫香あらびきソーセージ-135G/6本入り-455円", "あらさがしソーセージ-135G/6本入り-355円", ] # 1. 内包表記で"あらびきソーセージ"を含む表現を"あらびきソーセージ"に置換する n = ["あらびきソーセージ" if "あらびきソーセージ" in s else s for s in items] print(n) # ['あらびきソーセージ', 'あらびきソーセージ', 'あらびきソーセージ', 'あらびきソーセージ', 'あらさがしソーセージ-135G/6本入り-355円'] # 2. 正規表現で"あらびきソーセージ"を含む表現を"あらびきソーセージ"に置換する import re n = [] for s in items: n.append(re.sub("^.*(あらびきソーセージ).*$", r"\g<1>", s)) print(n) # ['あらびきソーセージ', 'あらびきソーセージ', 'あらびきソーセージ', 'あらびきソーセージ', 'あらさがしソーセージ-135G/6本入り-355円'] # 3. データフレームで正規表現置換する import pandas as pd json = ''' [ {"id": 1, "商品名": "あらびきソーセージ-135G/6本入り-315円"}, {"id": 2, "商品名": "あらびきソーセージ-135G/6本入り-345円"}, {"id": 3, "商品名": "あらびきソーセージ-135G/6本入り-355円"}, {"id": 4, "商品名": "薫香あらびきソーセージ-135G/6本入り-455円"}, {"id": 5, "商品名": "あらさがしソーセージ-135G/6本入り-355円"} ] ''' data = pd.read_json(json) data = data.replace("^.*(あらびきソーセージ).*$", r"\g<1>", regex=True) print(data) """ id 商品名 0 1 あらびきソーセージ 1 2 あらびきソーセージ 2 3 あらびきソーセージ 3 4 あらびきソーセージ 4 5 あらさがしソーセージ-135G/6本入り-355円 """ ```