スクレイピングしたデータから不要な文字を削除したいのです。「代金引換」や「送料無料」といった単語はカンタンですが、ワイルドカードを使った処理に悩みました・・
今回消したかったのはこんな文章です。仕入先さんからの連絡ですが、これをそのままエンドユーザー向けには出したくない!
※代金引換便は初回お取引のみとなります。2回目以降のご注文はその他のお支払方法をお選びください。★ご入金後の流れ <中略> ●大変恐縮ですが、土曜・日曜・祝日はお休みさせて頂いております。 ●エンドユーザー様からの返品・クレームはお受け致しかねます。 最後まで誠意を持って対応いたしますので、どうぞ宜しくお願い致します!
文字の置き換えや削除に使えそうな関数
色々とやってみていましたが、振り返ってみれば「replaceでは正規表現使えないらしい」という一点につきますorz
re.sub
正規表現で指示してあげられるのが特徴で、「ワイルドカード的に置き換えたり削除したりしたい!」という場合はこちらを選びます。
#基本の使い方
import re
'入れたい変数とか' = re.sub('変えたい内容、正規表現OK!','変更後の内容、''なら削除と同じ','元のテキスト'
余計伝わりにくいかなぁ・・?
#利用例
import re
before_response = 'スクレイピングしてきたデータ'
change_words = ['単語A','単語B','※代金引換便は.*致します!']
changed_word = ''
for i in range(len(del_words)):
before_response = re.sub(del_words[i],changed_word,before_response)
after_response = before_response
ワイルドカード的に使いたければ .* を利用できるre.subを使えば、クリアはできるはずです。
正規表現でのワイルドカードについてはこちらのブログを参照
https://blog.unfindable.net/archives/600
‘対象の文章’.replace(‘変える前の言葉’,’変えた後の言葉’)
純粋に単語を入れ替えたり消すだけならこちらが簡単
before_response = 'スクレイピングしてきたデータ'
change_words = ['単語A','単語B']
changed_word = ''
for i in range(len(del_words)):
after_response = before_response.replace( change_words[i] , changed_word)
関連してググるワードや勉強先
ワード
python replace re.sub ワイルドカード 正規表現
参考にさせて頂いたブログ
Pythonで文字列を抽出(位置・文字数、正規表現) | note.nkmk.me
Pythonで文字列strから部分文字列を抽出する方法について説明する。任意の位置・文字数を指定して抽出したり、正規表現のパターンで抽出したりできる。 位置(文字数)を指定して抽出: インデックス、スライスインデ ...
コメント