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

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

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

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

Q&A

解決済

1回答

103閲覧

Pythonで特定箇所の文字列を抽出したい

takumi601

総合スコア11

Python 3.x

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

0グッド

0クリップ

投稿2019/05/28 04:52

前提・実現したいこと

Pythonで特定箇所の文字を抽出したいと思っています。

その箇所の文字列は任意の長さなので、インデックスが使えません。
どのような方法があるのか、アドバイスいただけたらと思います。

よろしくお願いします。

--------------------------------やりたいこと---------------------------------------
■検索箇所の登録
下記のように検索したい箇所を、{数字}で記載したいです。

 検索内容のフォーマット
Our greatest {1} is not in never failing, but in rising up every {2} we fail.

 ※{1}の部分、{2}の部分に入る任意の文字列を抽出したい

■検索対象の文字列(例)
Our greatest glory is not in never failing, but in rising up every time we fail.

■検索結果
以下のようのようなリストを得たい

[glory, time]

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

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

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

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

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

guest

回答1

0

ベストアンサー

正規表現を使えば良いです。

Python

1import re 2 3form = 'Our greatest {1} is not in never failing, but in rising up every {2} we fail.' 4src = 'Our greatest glory is not in never failing, but in rising up every time we fail.' 5 6re_form = re.sub( 7 r'{\d+}', r'(\w+)', form 8) 9print(f're_form is "{re_form}"') 10 11m = re.fullmatch(re_form, src) 12print(list(m.groups()))

実行結果 Wandbox

plain

1re_form is "Our greatest (\w+) is not in never failing, but in rising up every (\w+) we fail." 2['glory', 'time']

投稿2019/05/28 05:01

LouiS0616

総合スコア35660

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

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

takumi601

2019/05/28 05:19

大変勉強になります。ありがとうございます。 re_form = re.sub( r'{\d+}', r'(\w+)', form ) の箇所で、下記のエラーがでます。もしわかるようであれば、原因を教えていただけないでしょうか。 r'(\w+)'の箇所を'abc'などの適当な文字列にすると、該当箇所ではエラーになりません。 よろしくお願いします。 File "C:\Users\r00495138\AppData\Local\Continuum\anaconda3\lib\re.py", line 192, in sub return _compile(pattern, flags).sub(repl, string, count) File "C:\Users\r00495138\AppData\Local\Continuum\anaconda3\lib\re.py", line 309, in _subx template = _compile_repl(template, pattern) File "C:\Users\r00495138\AppData\Local\Continuum\anaconda3\lib\re.py", line 300, in _compile_repl return sre_parse.parse_template(repl, pattern) File "C:\Users\r00495138\AppData\Local\Continuum\anaconda3\lib\sre_parse.py", line 1024, in parse_template raise s.error('bad escape %s' % this, len(this)) error: bad escape \w
LouiS0616

2019/05/28 05:32

新しいPythonだとエラー吐くみたいですね。 ちょっと古いのを使っていたもので、気付きませんでした。 気持ち悪い書き方ですが、r'{\d+}', r'(\w+)', form なら通るようです。
takumi601

2019/05/28 05:43

できました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問