質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

解決済

2回答

251閲覧

正規表現で漢字と数字を同時に除去して、データを出力したいです。

jury_new

総合スコア31

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

0クリップ

投稿2020/05/22 13:09

正規表現で漢字と数字を同時に除去し、データを出力したいです。

正規表現を使って、「年」と言う単語と数字(例19〜〜〜などの年代を示すもの)を削除しようとしています。
ご教示いただきたい点は、漢字と数字を同時に正規表現で取り除く方法についてです

試したこと

re.findallを使ってこのようなコードを書きました。
数字を削除することができました。

re.findall('[^0-9]+',new_type)

漢字の部分を除去しようと考え

re.findall('[^年]+',new_type)

として、無事漢字の部分だけの除去をすることができました。

そしてその後これらを合わせたコード。

re.findall('[^0-9]+|[^年]',new_type)

を出力したのですが、元に戻ってしまいました。
or条件だったことに気づき、次のコードに書き換えました。

re.findall('^(?=.*[^年])(?!.*[^0-9]).*$',new_type)

ですが、今度は中身が全て消えてしまいました。
最終的にやりたいこととしては、年という文字と数字の部分のデータを除去したいと考えています。
できれば年号も。。。。。

その後もう一度調べた結果、regexのモジュールを使う方法もチラッとあったのですが最終的には使うしかないのでしょうか?

補足情報(FW/ツールのバージョンなど)

基礎となるコード

def elsepe (): for per in all: for two in all.find_all('tr'): for three in two.find_all('td'): un = three.get_text(strip=True) for more in three.select('a'): new_type = more.get_text(strip=True)             #下記のコードの書き換えを何度もしています。(**の部分) **one = re.findall('[^0-9]+|[^年]+',new_type)** show = print(one) return show elsepe()

発生している問題

一部抜粋です。
このように何もない状況です。

[] [] [] [] [] [] [] [] [] [] [] [] [] []

全体のソースコード

python

1import requests 2import re 3import matplotlib.pyplot as plt 4import numpy as np 5from matplotlib.offsetbox import AnchoredText 6from bs4 import BeautifulSoup 7from requests.exceptions import Timeout 8 9 10 11url = 'https://ja.wikipedia.org/wiki/%E5%86%85%E9%96%A3%E7%B7%8F%E7%90%86%E5%A4%A7%E8%87%A3#%E5%86%85%E9%96%A3%E7%B7%8F%E7%90%86%E5%A4%A7%E8%87%A3%E3%81%AE%E4%B8%80%E8%A6%A7_2' 12try: 13 r = requests.get(url,timeout=3.5) 14except Timeout: 15 print('this is timeout error') 16 pass 17html_soup = BeautifulSoup(r.text,'html.parser') 18 19all = html_soup.find('table',class_='sortable wikitable') 20 21def person_name(): 22 for per in all: 23 for two in all.find_all('tr'): 24 for three in two.find_all('td'): 25 un = three.get_text(strip=True) 26 for more in three.find_all('b'): 27 ni = more.get_text(strip=True) 28 ori = print(ni) 29 30 return ori 31 32def elsepe (): 33 for per in all: 34 for two in all.find_all('tr'): 35 for three in two.find_all('td'): 36 un = three.get_text(strip=True) 37 for more in three.select('a'): 38 new_type = more.get_text(strip=True) 39 one = re.findall('^(?=.*[^年])(?!.*[^0-9]).*$',new_type) 40 show = print(one) 41 return show 42person_name() 43elsepe() 44

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

「年」と言う単語と数字(例19〜〜〜などの年代を示すもの)を削除

年と数字以外を削除するのではないのですか?
'[^0-9年]+'

投稿2020/05/22 13:23

yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jury_new

2020/05/22 13:55

ご回答ありがとうございます! 説明不足で申し訳ありません。 現在歴代総理大臣のフルネームのみをスクレイピングしようとしていたのですが、年と数字が含まれたデータとなっているため削除しよう質問させて頂いた次第です。
guest

0

ベストアンサー

削除するなら、subを使いましょう。

Python

1re.sub('[0-9年]','',new_type)

投稿2020/05/22 13:21

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jury_new

2020/05/22 13:52

ご回答ありがとうございます!無事できました。今まですごく遠回りをしていました。 最後にもう一点質問させて頂いてもよろしいでしょうか?無視して頂いても全然構いません。 今提案して頂いたように実行していたのですが、空欄が何箇所か見受けられます。 これらの空欄を削除する方法などはあったりするのでしょうか? お時間あったら回答の方よろしくお願いします。
otn

2020/05/22 14:15

空欄というのは何ですか?空白文字のこと?
jury_new

2020/05/22 14:54

そうです、ターミナル上にsubによって置き換えた空欄の部分の空欄です。
jury_new

2020/05/22 14:54

すみません誤字です、ターミナル上にある   です。
otn

2020/05/22 15:00

空白を削除するなら、re.sub(' ','',~~) です。
jury_new

2020/05/22 15:01

なるほど空白をさらに置き換えてしまうんですね! ありがとうございます! 最後まで丁寧に教えていただきありがとうございました。
otn

2020/05/22 15:05

あるいは、最初から「数字と"年"の前後にあった空白」も削除するなら、 re.sub(' *[0-9年] *','',~~) と「空白*」を付けておきます。
jury_new

2020/05/22 15:16

なるほど!!!!新たな視点です笑 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問