
前提・実現したいこと
置換したい文字をより詳しく指定したい。
今例えば、「さて、私鈴木太郎はこのたびテクノロジー株式会社代表取締役社長に選任され、去る
4月3日付をもちまして就任いたしました。ここに謹んでご報告申し上
げます。」という文章がある。
この文章を、「さて、私〇〇〇〇はこのたび〇〇〇〇〇〇〇〇〇〇代表取締役社長に選任され、去る4月3日付をもちまして就任いたしました。ここに謹んでご報告申し上
げます。」という文章に変換したい。
今回作りたいアルゴリズムは、私〜はの間の文字とこのたび〜代表取締役社長の間の文字を文字数だけ〇で置換できるものである。
発生している問題・エラーメッセージ
理想の文章に変換できない。
エラーは出ていない。
該当のソースコード
output = re.sub(r'鈴木太郎', '〇〇〇〇', text) print(output)
というコードを書いたがこれだと、指定の文字しか置換できない。
単語と単語の間の文字を置換する方法がないかお聞きしたい。
試したこと
上記のコード
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。

回答5件
3
正規表現の部分文字列置換を使うのが楽ではないでしょうか。
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
総合スコア13627
3
ベストアンサー
定型文なら下のようなコードで抜き出せるので、後処理でどうにでもなります。
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総合スコア30929
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
回答へのコメント


退会済みユーザー
2018/03/29 05:42

1
format関数というのを調べてみてください
また、正規表現というのも役に立つと思います
pythonは文字列操作に関してはいろいろ機能が揃っていますねー
投稿2018/03/29 03:52
編集2018/03/29 04:00総合スコア87497
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
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
総合スコア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総合スコア28656
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
回答へのコメント

退会済みユーザー
2018/03/29 06:41

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
同じタグがついた質問を見る
Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。