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

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

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

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

Python

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

Q&A

解決済

1回答

775閲覧

Pythonで特定の文字列で挟まれた文字列を取得する方法

fideo

総合スコア55

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2022/06/24 04:41

Pythonでテキストファイルから
テキストを読み込んで、特定の文字列で挟まれた文字列を取得したいです。
正規表現searchやfindallを使ってみましたが、希望な結果にならないです。
実現の結果になるようにコードのどこいけないか。教えていただけると幸いです。

お手数ですが、よろしくお願い致します。

テキストファイル *テストデータ

ダウンロード有効期限は7日間となっております。    [URL] https://test.com    [メールアドレス] test@sa-net.co.jp [title] テスト   [パスワード] ATEST1  ※URLが折り返されている場合は1行につなげてアクセスしてください。

実現したい内容
下記のようにURLとPWを取得したいです。

URL

https://test.com

PW

ATEST1

code

import re #テキスト読み込む f = open("test.txt", 'r', encoding='UTF-8') data = f.read() #print(data) #URL取得方法1 url = re.search(r'[URL](.+)[メールアドレス]',data).group(1) print(url) #RLが折り返されている場合は1行につなげてアクセ #PW取得 p = r'\パスワード(.*)\※URL' # アスタリスクに囲まれている任意の文字 #p = r'\*[^*]*\*' # アスタリスクに囲まれているアスタリスク以外の文字 r = re.findall(p, data) print(r) #[]

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

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

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

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

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

TakaiY

2022/06/24 05:56

現状のコードだとどのような結果が出るのですか?
guest

回答1

0

ベストアンサー

まず、dataは複数行の文字列なので検索時にre.MULTILINE | re.DOTALLを指定します。
URLは複数行にまたがる可能性があるので次の[まで、それ以外は単純に行末($)まで最短マッチ(?)で取得すればよいかと思います。
それぞれ最後に不要な改行、スペースを除去します。

Python

1import re 2from io import StringIO 3 4# テストファイルデータ 5s = """ダウンロード有効期限は7日間となっております。 6 7 [URL] https://test.com 8/abc.aspx 9?hoge=123&huga=456 10 [メールアドレス] test@example.com 11 12 [title] テスト 13 [パスワード] ATEST1 14 15 ※URLが折り返されている場合は1行につなげてアクセスしてください。""" 16 17#f = open("test.txt", 'r', encoding='UTF-8') 18f = StringIO(s) 19 20data = f.read() 21 22url = '' 23m = re.search(r'\[URL\](.*?)\[', data, re.MULTILINE | re.DOTALL) 24if m: 25 url = re.sub(r'\s', '', m.group(1)) 26print(f'url=[{url}]') 27 28for keyword in ['メールアドレス', 'title', 'パスワード']: 29 ret = '' 30 m = re.search(f'\\[{keyword}\\](.*?)$', data, re.MULTILINE | re.DOTALL) 31 if m: 32 ret = re.sub(r'\s', '', m.group(1)) 33 print(f'{keyword}=[{ret}]') 34 35""" 36url=[https://test.com/abc.aspx?hoge=123&huga=456] 37メールアドレス=[test@example.com] 38title=[テスト] 39パスワード=[ATEST1] 40"""

投稿2022/06/24 06:42

can110

総合スコア38233

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

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

fideo

2022/06/29 01:07

ありがとうございます。上記の方法で問題なくできました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問