python テキストデータから特定の文字列を削除したい

スクレイピングしたデータから不要な文字を削除したいのです。「代金引換」や「送料無料」といった単語はカンタンですが、ワイルドカードを使った処理に悩みました・・

今回消したかったのはこんな文章です。仕入先さんからの連絡ですが、これをそのままエンドユーザー向けには出したくない!

※代金引換便は初回お取引のみとなります。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から部分文字列を抽出する方法について説明する。任意の位置・文字数を指定して抽出したり、正規表現のパターンで抽出したりできる。 位置(文字数)を指定して抽出: インデックス、スライスインデ ...

コメント

タイトルとURLをコピーしました