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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

正規表現

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

PyCharm

エディター・開発ツール

Q&A

解決済

2回答

487閲覧

python:文章を区切りごとにリストへ格納する方法について

snow-pots

総合スコア2

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

正規表現

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

PyCharm

エディター・開発ツール

0グッド

0クリップ

投稿2022/02/18 13:15

はじめまして。ご教授ください。pythonを勉強して2ヶ月程度です。
・python 3.10(PyCharm 2021.3.2 (Community Edition))
・win10pro
空行と改行を含む以下の文章を、改行ごとのまとまりを順にリストに入れてprint()で出力を考えています。正規表現で改行2つ以上の文節ごとに区切り、for文で繰り返しを考えていました。しかし、文節ごとをリストに入れるところでうまく動かず悩んでいます。
記載したコードはつまずいてしまったところまでで申し訳ありません。

【入力する文章】##は実際は改行or空白のみ
##改行1行目
##改行2行目+空白数文字(不定)
ドンペリドン錠10mg「aaaa」 1錠
吐き気ある時 10回分
##改行1行目
##改行2行目+空白数文字(不定)
##改行3行目
ブロムヘキシン塩酸塩錠4mg「bbb」 3錠
分3 朝・昼・夕食後
痰がひどい時 7日分
##改行1行目
##改行2行目+空白数文字(不定)
##改行3行目
以下、同様の区切りで続く

【実現したいこと】
①:['ドンペリドン錠10mg「aaaa」', '1錠', '吐き気ある時', '10回分']と2~3つの改行ごとでリストに入れる
②:①をprint()で出力後にリストを空にする
③:ブロムヘキシン塩酸塩錠4mg「bbb」から7日分までを空にしたリストに再度いれる
④:③を出力し、リストを空に。次の区切りをリストにいれて出力…を繰り返す。

python

1----------------------------------------------------------------------------- 2import re 3l = [] 4 5bun = '\n \nドンペリドン錠10mg「EMEC」 1錠 \n吐き気ある時 10回分\n \n\nブロムヘキシン塩酸塩錠4mg「サワイ」 3錠 \n分3 朝・昼・夕食後 6痰がひどい時 7日分\n \n\n' 7 8itizai = re.finditer(r'(\s.+\s)', bun, re.MULTILINE) 9 10for i in itizai: 11 print(f'{i.group()}') 12 13-----------------------------------------------------------------------------

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

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

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

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

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

guest

回答2

0

python

1# bun = ''' 2# 3# ドンペリドン錠10mg「EMEC」 1錠 4# 吐き気ある時 10回分 5# 6# 7# ブロムヘキシン塩酸塩錠4mg「サワイ」 3錠 8# 分3 朝・昼・夕食後 9# 痰がひどい時 7日分 10# 11# 12# ''' 13 14import re 15l = [] 16 17bun = '\n \nドンペリドン錠10mg「EMEC」 1錠 \n吐き気ある時 10回分\n \n\nブロムヘキシン塩酸塩錠4mg「サワイ」 3錠 \n分3 朝・昼・夕食後 痰がひどい時 7日分\n \n\n' 18 19itizai = re.findall(r'(\s*\n){2,3}(.+?)(?=(\s*\n){2,3})', bun, re.DOTALL) 20for i in itizai: 21 l.append(re.split(r'[\s\n]+', i[1])) 22 23for i in l: 24 print(i) 25 26# 27['ドンペリドン錠10mg「EMEC」', '1錠', '吐き気ある時', '10回分'] 28['ブロムヘキシン塩酸塩錠4mg「サワイ」', '3錠', '分3', '朝・昼・夕食後', '痰がひどい時', '7日分']

投稿2022/02/18 14:04

melian

総合スコア19618

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

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

snow-pots

2022/02/18 14:43

ご回答いただきありがとうございます。 拙いコードを最大限に汲んで改善いただき、ありがとうございます! 正規表現の使い方が甘かったようで、しっかり勉強したいと思います!
guest

0

ベストアンサー

以下のサンプルコードでどうでしょうか?
Windows10のPython3.9.1で動作確認しました。
質問の意図を勘違いしていたらすみません。

python

1s1 = """ドンペリドン錠10mg「aaaa」 1錠 2吐き気ある時 10回分 3 4 5 6ブロムヘキシン塩酸塩錠4mg「bbb」 3錠 7分3 朝・昼・夕食後 8痰がひどい時 7日分 9 10 11 12a 13b 14c 15 16 17""" 18 19list1 = [] 20for line in s1.split("\n"): 21 line_ = line.strip() 22 if line_: 23 list1.append(line_) 24 else: 25 if list1: 26 print("\n".join(list1)) 27 list1.clear()

実行結果

ドンペリドン錠10mg「aaaa」 1錠 吐き気ある時 10回分 ブロムヘキシン塩酸塩錠4mg「bbb」 3錠 分3 朝・昼・夕食後 痰がひどい時 7日分 a b c

投稿2022/02/18 13:37

msiz07

総合スコア172

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

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

snow-pots

2022/02/18 14:26

ご回答ありがとうございます。 無理に正規表現使わずに表現できるのですね!まさにイメージ通りの出力でした! もっとシンプルな視点で、基本を見直して勉強してみます。 ベストアンサーにさせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問