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

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

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

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

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

Q&A

解決済

2回答

2636閲覧

文字列から数字の抽出

City

総合スコア25

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

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

0グッド

0クリップ

投稿2018/09/02 12:19

編集2018/09/02 12:26

Terateilのおかげで
ついさっき正規表現というものに触れ、
複雑なテキスト文からも特定の文字列を取り出せるようになりました。
本当に便利な機能ばかりで驚かされます。

本題です。
特定の文字列を抽出したのはいいのですが、
そこからの操作で詰まってしまいました。

文字列がこちらです。

text

10[hour] + 2[minute] 20[hour] + 47[minute] 30[hour] + 4[minute] 40[hour] + 23[minute] 50[hour] + 3[minute]

上の文字列を読み込んだとします。
次なる目標は、[分]単位で時間の合計を求めることです。
この場合、欲しい値(実行結果)は 79 となります。

python

1""" 2'.'は任意の文字列を表す。 3'/d'は任意の数字を表す。 4など、ウェブから参考になりそうな操作を探していて、 5一応のコードを書いてみましたが、実行結果が 6""" 7 80[hour] + 2[minute] 90[hour] + 47[minute] 100[hour] + 4[minute] 110[hour] + 23[minute] 120[hour] + 3[minute] 130[hour] + 40[minute] 140 15[ 16h 17o 18u 19r 20] 21 22+ 23 244 250 26[ 27m 28i 29n 30u 31t 32e 33] 34 35#となり、失敗に終わりました。

いったい自分は何をしているのかわからないです。

追記です(実際に自分が書いたコード)

python

1#processAは上のplaintextからwith構文で読み込んだものです。 2for el in processA: 3 re.findall('/d[minute]',el) 4 if el: 5 print(el) 6for q in el: 7 re.findall('/d[minute]',q) 8 if q: 9 print(q) 10""" 11X[minute]のXの部分が欲しいです。 12コード中'q'を'/d'にしてエラーも出しました。 13""" 14

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

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

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

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

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

hayataka2049

2018/09/02 12:20

書いてみたコードはどこですか・・・
City

2018/09/02 12:26

質問を修正しました。
hayataka2049

2018/09/02 12:33

読み込み部分も記載してください
guest

回答2

0

ベストアンサー

数字は、/dじゃなくて\dです。

Python

1import re 2 3text=""" 40[hour] + 2[minute] 50[hour] + 47[minute] 60[hour] + 4[minute] 70[hour] + 23[minute] 80[hour] + 3[minute] 9""" 10result = re.findall(r'\d+(?=[minute])',text) 11print(result)

投稿2018/09/02 12:47

otn

総合スコア84423

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

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

City

2018/09/02 13:11

/dと\d取り違えてました。コードを見れば 正規表現を知らない自分がわかります。 のちほどゆっくりと解読しながら学んでいきたいと思います。 ありがとうございました!!
otn

2018/09/02 13:16

初心者であれば、まず、r'\d+[minute]'で抽出して、"[minute]"を削除するのがわかりやすいです。
guest

0

いったい自分は何をしているのかわからないです。

正規表現で何か意味のある処理をしていないことだけは確かです。

python

1for el in processA: 2 re.findall('/d[minute]',el) # 返り値を何ら活用していないので、ないのと同じ 3 if el: # 空文字列とかにならない限りはTrue 4 print(el) 5for q in el: 6 re.findall('/d[minute]',q) # 返り値を何ら活用していないので、ないのと同じ 7 if q: # 空文字列とかにならない限りはTrue 8 print(q)

大雑把に書き換えると、

python

1for el in processA: # 一行ずつ読み込んでいると思われる(processAは恐らくファイルオブジェクト) 2 print(el) # 一行ずつ表示 3for q in el: # 最後に表示した行を一文字ずつループ 4 print(q) # 一文字ずつ表示

あと、/dじゃなくて\dですからね。

投稿2018/09/02 12:37

hayataka2049

総合スコア30933

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

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

City

2018/09/02 13:11

/dと\d取り違えてました。 丁寧な説明付きコードで頭の整理をすることができました。 今度はきちんと正規表現使えるように勉強します。 ありがとぅございました!!
hayataka2049

2018/09/02 13:23

今回の質問内容だと、使えていなかったのは正規表現ではなくpythonそのものですね。 正規表現を覚えようとする前に、pythonのプログラミングがちゃんとできるようにならないと、泥沼です。 たとえば今回のを正規表現を使わないで書けますか? という。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問