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

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

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

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

正規表現

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

Q&A

解決済

2回答

6389閲覧

python正規表現で、特定の文字に囲まれた内容を抽出するには

taro373

総合スコア189

Python 3.x

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

正規表現

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

0グッド

0クリップ

投稿2022/02/13 11:02

pythonで正規表現を用いて、特定の文字に囲まれた部分を抽出しようとしています。
具体的には ABとYZで挟まれた文字列を取得しようと正規表現を書きました。

文字列が"ABCDEYZ"のときは、想定通りの"CDE"が取得できましたが
文字列が"ABCDEYZ1234YZ"と、「囲む文字」の終わりにあたる文字が2つあると
求めたい部分より長く"CDEYZ1234"と抽出されました。

確かに“ABとYZで挟まれた文字列”ですが、前から調べて、最初に"YZ"が現れた時点で
『囲まれている文字列』と判断させるにはどうすればいいのでしょうか。

下記の方法では考えているようには取得できなかったので、最初に"AB"と"YZ"が現れる位置を
取得して、インデックス指定で文字を切り出しています。
実現したいことはできましたが、正規表現の勉強のために学んでおきたいと思い質問しました。

import re origin_str = "ABCDEYZ" # ABとYZで挟まれた文字列を取得する new_str = re.search(r'AB(.+)YZ',origin_str).group(1) print(new_str) origin_str = "ABCDEYZ1234YZ" # ABとYZで挟まれた文字列を取得する new_str = re.search(r'AB(.+)YZ',origin_str).group(1) print(new_str)

実行結果

root@DESKTOP:/mnt/c/Users/hoge# python3 test_re.py CDE CDEYZ1234

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

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

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

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

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

guest

回答2

1

ベストアンサー

? を付けて最短一致にします。

python

1# ABとYZで挟まれた文字列を取得する 2#new_str = re.search(r'AB(.+)YZ',origin_str).group(1) 3new_str = re.search(r'AB(.+?)YZ',origin_str).group(1) 4print(new_str) 5 6# 7CDE

投稿2022/02/13 11:07

melian

総合スコア21187

taro373👍を押しています

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

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

taro373

2022/02/13 14:21

ありがとうございました 「最短一致」の単語が思いつきませんでした なにかあったよなぁ.... と持っていたのですが、そうそれでした。 ありがとうございました。
guest

1

AB(.+?)YZ

「最短一致」で調べるといいです。

投稿2022/02/13 11:05

itagagaki

総合スコア8402

taro373👍を押しています

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問