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

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

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

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

Q&A

解決済

5回答

1392閲覧

置換したい文字をより詳しく指定したい

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

1クリップ

投稿2018/03/29 03:48

前提・実現したいこと

置換したい文字をより詳しく指定したい。
今例えば、「さて、私鈴木太郎はこのたびテクノロジー株式会社代表取締役社長に選任され、去る
4月3日付をもちまして就任いたしました。ここに謹んでご報告申し上
げます。」という文章がある。
この文章を、「さて、私〇〇〇〇はこのたび〇〇〇〇〇〇〇〇〇〇代表取締役社長に選任され、去る4月3日付をもちまして就任いたしました。ここに謹んでご報告申し上
げます。」という文章に変換したい。

今回作りたいアルゴリズムは、私〜はの間の文字とこのたび〜代表取締役社長の間の文字を文字数だけ〇で置換できるものである。

発生している問題・エラーメッセージ

理想の文章に変換できない。
エラーは出ていない。

該当のソースコード

output = re.sub(r'鈴木太郎', '〇〇〇〇', text) print(output)

というコードを書いたがこれだと、指定の文字しか置換できない。
単語と単語の間の文字を置換する方法がないかお聞きしたい。

試したこと

上記のコード

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

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

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

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

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

guest

回答5

0

正規表現の部分文字列置換を使うのが楽ではないでしょうか。

python

1import re 2 3txt = 'さて、私田中一郎はこのたびテクノロジー株式会社代表取締役社長に選任され、去る4月3日付をもちまして就任いたしました。ここに謹んでご報告申し上げます。' 4pattern_r = 'さて、私(.*?)はこのたび(.*?)株式会社代表取締役社長に選任され、去る4月3日付をもちまして就任いたしました。ここに謹んでご報告申し上げます。' 5pattern_w = re.sub("(.*?)", "{}", pattern_r) 6 7subtxt = re.search(pattern_r, txt).groups() 8subtxt2 = ["○" * len(x) for x in subtxt] 9print(pattern_w.format(*subtxt2)

投稿2018/03/29 05:20

KojiDoi

総合スコア13671

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

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

0

ベストアンサー

定型文なら下のようなコードで抜き出せるので、後処理でどうにでもなります。

python

1>>> import re 2>>> s = "さて、私鈴木太郎はこのたびテクノロジー株式会社代表取締役社長に選任され、去る4月3日付をもちまして就任いたしました。ここに謹んでご報告申し上げます。" 3>>> re.search("さて、私.+?はこのたび", s) 4<_sre.SRE_Match object; span=(0, 13), match='さて、私鈴木太郎はこのたび'> 5>>> re.search("このたび.+?代表取締役社長に選任され", s) 6<_sre.SRE_Match object; span=(9, 35), match='このたびテクノロジー株式会社代表取締役社長に選任され'>

一意に識別できる程度に余計なものを含めてmatchさせ、余計なものの文字数はわかってるので前後を適当に削れば望むもの(今回は人名と会社名の固有名詞)が得られます。あとは適当に置換してやるだけなので簡単な作業です。

追記

せっかくなので最後までやってみました。

python

1>>> name_match = re.search("さて、私.+?はこのたび", s).group() 2>>> company_match = re.search("このたび.+?代表取締役社長に選任され", s).group() 3>>> name_match 4'さて、私鈴木太郎はこのたび' 5>>> company_match 6'このたびテクノロジー株式会社代表取締役社長に選任され' 7>>> name_len = len(name_match)-9 8>>> company_len = len(company_match)-16 9>>> name_len 104 11>>> company_len 1210 13>>> "さて、私{0}はこのたび{1}代表取締役社長に選任され、去る4月3日付をもちまして就任いたしました。ここに謹んでご報告申し上げます。".format("○"*name_len, "○"*company_len, ) 14'さて、私○○○○はこのたび○○○○○○○○○○代表取締役社長に選任され、去る4月3日付をもちまして就任いたしました。ここに謹んでご報告申し上げます。'

投稿2018/03/29 04:12

編集2018/03/29 04:30
hayataka2049

総合スコア30933

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

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

退会済みユーザー

退会済みユーザー

2018/03/29 04:31

回答をくださりありがとうございます。re.search("さて、私.+?はこのたび", s)からmatchした'さて、私鈴木太郎はこのたび'を取り出すにはどうしたら良いのでしょうか?よろしくお願いいたします。
hayataka2049

2018/03/29 04:34

re.searchの返り値は_sre.SRE_Match objectで、この.group()メソッドを呼ぶとマッチした文字列が返ります。
退会済みユーザー

退会済みユーザー

2018/03/29 05:42

ありがとうございます。一番わかりやすかったのでベストアンサーにさせていただきました。とても勉強になりました。
guest

0

format関数というのを調べてみてください


また、正規表現というのも役に立つと思います
pythonは文字列操作に関してはいろいろ機能が揃っていますねー

投稿2018/03/29 03:52

編集2018/03/29 04:00
y_waiwai

総合スコア87804

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

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

0

%sを使う方法

python

1name1 = "foo" 2org1 = "bar" 3s = "%s - %s" 4contents = s % (name1, org1)

.formatを使う方法

python

1name1 = "foo" 2org1 = "bar" 3s = "{name} - {org}" 4contents = s.format(name=name1, org=org1)

投稿2018/03/29 04:15

tachikoma

総合スコア3601

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

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

0

あらかじめ置換しやすいテンプレートを作っておけばいいでしょう。

さて、私<name>はこのたび<org>代表取締役社長に選任され、去る 4月3日付をもちまして就任いたしました。ここに謹んでご報告申し上 げます。

###追記
質問を読み誤っていました。
置換前の文字数と同じ数だけの〇を入れるということですね。

Python

1text = 'さて、私田中一郎はこのたびテクノロジー株式会社代表取締役社長に選任され、去る4月3日付をもちまして就任いたしました。ここに謹んでご報告申し上げます。' 2str = r'田中一郎' 3re.sub(str, ''.ljust(len(str), '〇'), text)

投稿2018/03/29 03:53

編集2018/03/29 04:15
Zuishin

総合スコア28662

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

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

退会済みユーザー

退会済みユーザー

2018/03/29 06:41

こんなんぶっこまれても、おっさんしか気が付かん気がするwww
Zuishin

2018/03/29 06:42

気が付かれたことにビビりましたw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.45%

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

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

質問する

関連した質問