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

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

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

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

Q&A

解決済

1回答

2160閲覧

正規表現を用いて文字列を置換する場合に、一致した部分を別の関数に渡し、返り値で置換したい

wawawatataru

総合スコア8

Python

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

0グッド

0クリップ

投稿2018/08/13 14:43

前提・実現したいこと

pythonで正規表現に一致した部分の一部を別の関数に渡して、処理をしたい

発生している問題

下記コードで正規表現に一致した部分を\1として他の関数(replacement_word)に渡すと、
replcement_word内ではstr型の\1になってしまいます。
正規表現に一致した部分を別の関数に渡した際に、一致した部分を文字列として関数の処理をすることはできないでしょうか。

python

1def replacement(text): 2 replacement_text = re.sub(r'[command((.+))]', replacement_word(r'\1'), text 3 return replacement_text 4 5def replacement_word(command_name): 6 type(command_name)#<class 'str'> 7 print(command_name)#\1 8 #本来は一致した文字列で下のif文を処理したい 9 if str(command_name) == 'str1': 10 return 'commandは' + command_name + 'です' 11 else: 12 return 'そのほかのコマンドです'

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

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

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

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

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

guest

回答1

0

ベストアンサー

re.subの第二引数は関数オブジェクトを取れるので、それを使えば良いです。

6.2. re — 正規表現操作 — Python 3.5.3 ドキュメント #re.sub

引数はマッチオブジェクトとして渡されるので、ちょっと注意が必要。

python

1import re 2def replacement(text): 3 replacement_text = re.sub(r'[command((.+))]', replacement_word, text) 4 return replacement_text 5 6def replacement_word(command): 7 command_name = command.group(1) 8 print(command_name) 9 if command_name == 'str1': 10 return 'commandは' + command_name + 'です' 11 else: 12 return 'そのほかのコマンドです' 13 14print(replacement("[command(str1)]")) 15print(replacement("[command(hoge)]")) 16""" => 17str1 18commandはstr1です 19hoge 20そのほかのコマンドです 21""" 22

マッチオブジェクトの細かい仕様などはドキュメントで確認してください。

投稿2018/08/13 14:56

編集2018/08/13 15:44
hayataka2049

総合スコア30933

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

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

wawawatataru

2018/08/13 15:45

hayataka2049様 ご回答ありがとうございます。 あげていただいたリンクとサンプルコードで問題を解決することができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問