🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Python

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

Q&A

解決済

1回答

772閲覧

Python 特定の文字列の抽出

退会済みユーザー

退会済みユーザー

総合スコア0

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2019/09/07 02:17

はじめまして。正規表現の文字列抽出について質問させて頂きます。

sampleという変数があります。

sample = "あいうえおoutput20190907-103512.txtAIUTNBNDOEDLSWかきくけお123"

この中から output20190907-103512.txt だけを取り出してresultに格納したいです。

result= "output20190907-103512.txt"

しかしoutputとtxtの中の数字は日付なので一定ではありません。そこで自分なりにコードを書いたのですが
実現できずに困っております。よろしくお願いいたします。

#ためしたこと

output_index = sample.find("output") if output_index != -1: #output文字列の開始位置を表示する print "found at output", output_index txt_index = sample.find("txt") if txt_index != -1: #text文字列の開始位置を表示する print "found at text", txt_index result = sample[output_index:txt_index]) print(sample[output_index:txt_index]) else: print "not found"

#できないこと
20190907-103512の日付の部分は毎回変更するので可変となります。
また抽出したい文字は必ずoutputで始まり.txtで終わります。
outputのあとのtxtだけ読み込む方法も記載がわかりません。

#参考にしたサイト
https://uxmilk.jp/41416
https://www.javadrive.jp/python/string/index11.html

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

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

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

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

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

guest

回答1

0

ベストアンサー

正規表現はPythonの勉強とは別で学んだほうがいいと思います。
表現の仕方を覚えてPythonでやるにはどうするかを考えたほうがよいです。

Python

1import re 2 3sample = "あいうえおoutput20190907-103512.txtAIUTNBNDOEDLSWかきくけお123" 4 5output_index = sample.find("output") 6if output_index != -1: 7 #output文字列の開始位置を表示する 8 print("found at output", output_index) 9 10 txt_index_after_output = sample[output_index+6:].find("txt") 11 if txt_index_after_output != -1: 12 #text文字列の開始位置を表示する 13 print("found at text", output_index + 6 +txt_index_after_output) 14 15 result = sample[output_index:output_index+6+txt_index_after_output+3] 16 print(result) 17else: 18 print("not found") 19 20print(re.findall('(output.*?.txt)', sample, re.S)[0])

投稿2019/09/07 02:36

編集2019/09/07 02:45
nomuken

総合スコア1627

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

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

退会済みユーザー

退会済みユーザー

2019/09/07 02:37

了解しました。コードすぐ試します。そうか!こう書くのか。また連絡します
退会済みユーザー

退会済みユーザー

2019/09/07 02:38

一点だけ、[txt]の検索位置なのですが「output」の開始位置以降に設定したいです。
退会済みユーザー

退会済みユーザー

2019/09/07 02:48

動きました。 6と3はoutputとtxtの文字数でしょうか? print(re.findall('(output.*?.txt)', sample, re.S)[0]) ご教示頂いた上記1文ですべてクリアになるということでしょうか?
退会済みユーザー

退会済みユーザー

2019/09/07 02:50

例えば、 sample = "txtとtxtやoutput2015121001524545.txtあdふぁ"から sample = "output2015121001524545.txt"を抽出したいです。
nomuken

2019/09/07 02:52

> 6と3はoutputとtxtの文字数でしょうか? はい。 > ご教示頂いた上記1文ですべてクリアになるということでしょうか? マッチする文字列が見つからなかった場合の処理が入っていません。必ず含んでいるという前提であれば同じになります。
退会済みユーザー

退会済みユーザー

2019/09/07 02:56

本当にありがとうございます。私ではこの1文のコードを書くことはできませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問