@sandoraki (John)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Pythonでの正規表現の使い方

Pythonでの正規表現の使い方が分かりません。

Pythonで下記の文字列から任意の箇所だけを取得したいのですが、その際に組むべき正規表現部分の書き方が自分では上手く出来なかったので質問を投げました。

【問題の文字列】

[Name]:message

※「Name」と「message」は任意です。

【取得したい箇所】

取得したいのは「message」の部分のみです。
自分で調べて試したりもしたのですが、いまいちエスケープや正規表現の正しい組み方などが分かりませんでした。

分かる方いましたらよろしくお願いします。

0 likes

2Answer

正規表現の使用が必須でないなら単純にこれでいかがでしょう?

sample = "[John Doe]:hello, world"
print(sample.split(":")[1]) # hello, world

正規表現を使用するなら一例としてこんな感じのようです。

import re

sample = "[John Doe]:hello, world"

pattern = r'\[.*?\]:(.*?)$'

match = re.search(pattern, sample)

if match:
    extracted_text = match.group(1)
    print(extracted_text) # hello, world
else:
    print("Not found.")

1Like

Comments

  1. 横から失礼します。

    pattern = r'\[.*?\]:(.*?)$'

    この場合の?は書く意味が無いと思います。

    pattern = r'\[.*\]:(.*)$'

    ?があっても無害で、結果は同じすが・・・

  2. 修正ありがとうございます、勉強になります

  3. message 部分にも ]: が含まれる場合、 r'\[.*\]:(.*)$' だと最後に現れる ]: まで name にマッチしてしまい、 message の前半部分が取り出せません。少なくとも r'\[.*?\]:(.*)$' のように ? が必要です。

  4. @uasi さん

    message 部分にも ]: が含まれる場合・・・

    そのケースを想定できていませんでした。その場合は最長一致ではダメですね。
    ご指摘ありがとうございました。

Your answer might help someone💌