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

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

新規登録して質問してみよう
ただいま回答率
85.50%
正規表現

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

Python

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

Q&A

解決済

4回答

700閲覧

Python テキストの中から項目を抽出したい あともう一歩のひと工夫が思いつきません

k.nakazono

総合スコア4

正規表現

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

Python

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

0グッド

0クリップ

投稿2021/07/19 15:25

編集2021/07/19 15:27

以下のような「:(セミコロン)」で区切られたテキストから、
セミコロンの前のタイトルとセミコロン後の値の組み合わせを抽出したいです。

"画面サイズ:10.2インチ 画面解像度:2160x1620 詳細OS種類:iPadOS ストレージ容量:32GB CPU:Apple A12"

以下のような形で抽出したいです。

json

1{ 2 "画面サイズ": "10.2インチ", 3 "画面解像度": "2160x1620", 4 "詳細OS種類": "iPadOS", 5 "ストレージ容量": "32GB", 6 "CPU": "Apple A12" 7}

split(" ")で半角スペースで区切った後に、セミコロン前後でKeyとValueを取得すればよいと考えましたが、
ネックなのは「Apple A12」のようにValueに半角スペースが含まれる場合に意図した形で区切れないということです。

何かひと工夫必要なのかと思いますが、そのひとひねりが思いつかずモヤモヤしています。。
このような場合にズバッと効率的にテキスト抽出をする方法をお知恵をお貸し頂きたいですm(__)m

よろしくおねがいします。

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

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

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

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

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

udon-ken

2021/07/19 16:25

自分もつられて間違えて書いてしまいましたが・・・ 「:(セミコロン)」 これ、コロンです笑
guest

回答4

0

udon-kenさんが書いているとおり、条件がなければ区切れません。
そこで、コロンの前のタイトルには空白は含まれないという条件を付けてみました。

python

1def title_value(input): 2 s_list = input.split(':') 3 m_list = [s_list[0]] + sum([[' '.join(s.split()[:-1]), s.split()[-1]] for s in s_list[1:-1]], []) + [s_list[-1]] 4 return {m_list[i] :m_list[i+1] for i in range(0, len(m_list), 2)}

実行結果

python

1>>> title_value("画面サイズ:10.2インチ 画面解像度:2160x1620 詳細OS種類:iPadOS ストレージ容量:32GB CPU:Apple A12") 2{'画面サイズ': '10.2インチ', '画面解像度': '2160x1620', '詳細OS種類': 'iPadOS', 'ストレージ容量': '32GB', 'CPU': 'Apple A12'}

udon-kenさんの例の実行結果

python

1>>> title_value("画面サイズ:10.2インチ 画面解像度:2160x1620 詳細OS種類:iPadOS CPU:Apple A12 ストレージ容量:32GB") 2{'画面サイズ': '10.2インチ', '画面解像度': '2160x1620', '詳細OS種類': 'iPadOS', 'CPU': 'Apple A12', 'ストレージ容量': '32GB'}

投稿2021/07/19 16:15

ppaul

総合スコア24666

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

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

0

ベストアンサー

こんな感じで。

Python

1import re 2 3foo = "画面サイズ:10.2インチ 画面解像度:2160x1620 詳細OS種類:iPadOS ストレー>ジ容量:32GB CPU:Apple A12" 4 5keys = re.findall(r"\S+:",foo) 6values = re.split("|".join(map(re.escape,keys)), foo)[1::] 7 8bar = dict(zip(keys,values)) 9 10print(bar)

投稿2021/07/19 16:14

otn

総合スコア84423

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

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

0

それ、人間でも区切れなくないですか??
例はまだ最後の項目についてなので人間なら「これが最後の項目だからコロンの後ろが全部値だろう」って分かりますが、
"画面サイズ:10.2インチ 画面解像度:2160x1620 詳細OS種類:iPadOS CPU:Apple A12 ストレージ容量:32GB"
のように並んだ時、CPUがApple A12なのかCPUはAppleで次の項目が「A12 ストレージ容量:32GB」なのか分からないです。

投稿2021/07/19 15:51

編集2021/07/19 16:26
udon-ken

総合スコア657

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

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

0

皆さんご回答ありがとうございます。
突破力に関心いたします。こんなコードの書き方があるんですね。。

今回は一番感心したotnさんの回答をベストアンサーとさせていただきました。

皆さん本当にありがとうございました。

投稿2021/07/20 02:10

k.nakazono

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問