- ベストアンサー
置換
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>変換されずに\\のままのところが残ってしまいます s/\\/<k>/g; か s/\\/<k>/go; でやります。 gオプションは、該当するものを全て置き換えます。 付けない場合、最初に見つかったものを置き換えますので、それで、残るモノがあるのだと思います。 oオプションは、正規表現を毎回評価しない(内部表現にかえる、)ので繰りかえし作業する場合に多少効率がよくなります。
その他の回答 (3)
- leaz024
- ベストアンサー率75% (398/526)
>> s/\\(?!begin)/<k>/ > \begin以外にも\から始まる要素がたくさん > あるときはどうしたらいいのでしょうか。 そのような場合は、それらのパターンを | で区切って並べます。例えば、\begin、\end、\etc でない \ を <k> に置換するには次のようにします。 s/\\(?!begin|end|etc)/<k>/ ただし、この方法はあまり効率がよくないので、他の置換を先に行い、最後に \ → <k> の置換をする方がよいでしょう。 > うまく<k>に変換されるのと、変換されずに\\のままのところが残ってしまいます。どうしたらうまくいくでしょうか。 置換オプションに g を指定してみてください。g は global の意味で、マッチするパターンを全て置換します。 これを指定しない場合、最初に見つけたパターンだけしか置換されません。 s/\\/<k>/g ※もしこれでもダメな場合は、再現するスクリプトを提示してください。
お礼
うまくいきました!どうもありがとうございます。 >s/\\(?!begin|end|etc)/<k>/ に書くのですね。勉強になりました。 >ただし、この方法はあまり効率がよくないので・・・ はい。最後に置換することに致しました。 本当に助かりました。感謝致します。
- leaz024
- ベストアンサー率75% (398/526)
No.1さんの回答でOKだと思いますが、もし何らかの理由で*より先に s/\\/<k>/ をしなければならない場合、次のようにすることで \begin を置換対象から外すことができます。 s/\\(?!begin)/<k>/ この「/パターン1(?!パターン2)/」というのは、直後にパターン2がないパターン1にマッチする正規表現です。
お礼
早速の回答、ありがとうございます。 このような書き方もあるのですね。すごいです…。 勉強になります。 >s/\\(?!begin)/<k>/ \begin以外にも\から始まる要素がたくさん あるときはどうしたらいいのでしょうか。 実は、書いてるプログラムは、 s/\\begin/<start>/; ・・・・・* のほかにもs/\\○×□/<△☆>/; というのが何行かありまして、 最後にs/\\/<k>/;をしてみました。 あるテキストファイルを読み込んで、このプログラムで変換しようとしているのですが、そのテキスト中には、\\がところどころにあって、上記のような変換のプログラムでやってみると、うまく<k>に変換されるのと、変換されずに\\のままのところが残ってしまいます。どうしたらうまくいくでしょうか。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
*を実施した後で 実施する
お礼
早速の回答、ありがとうございます。 実際に書いてるプログラムは、 s/\\begin/<start>/; ・・・・・* のほかにもs/\\○×□/<△☆>/; というのが何行かありまして、 最後にs/\\/<k>/;をしてみました。 あるテキストファイルを読み込んで、このプログラムで変換しようとしているのですが、そのテキスト中には、\\がところどころにあって、上記のような変換のプログラムでやってみると、うまく<k>に変換されるのと、変換されずに\\のままのところが残ってしまいます。どうしたらうまくいくでしょうか。
関連するQ&A
- # の置換はどうすればいいですか?
#をAに置換する場合 s/#/A/; というふうに考えますが、コメントアウトされてしまいます。 /を置換するときは\/でエスケープできるのですが、#の場合どうすればよいのでしょう? また、////という文字列をAに置換する場合、 s/\/\/\/\//A/; というふうに書かなければならないのでしょうか? 何かうまい方法はありますか?
- ベストアンサー
- Perl
- EXCELの置換について
こんにちは、EXCELの置換についてお尋ねします。 一つのセルに「数字(0~の数字)s] もしくは、「s数字(0~の数字)」というように入力してあります。 9s, s12 s5 という感じです。 それを、数字だけに置換したいのですが、 出来たら、いっぺんに換えたいのですが、どなたか 教えてください。
- ベストアンサー
- その他(データベース)
- 偶置換、奇置換
群について勉強していて、わからないことがあります。 nを自然数として、X_n={1,2,…,n}、 S_n={σ:X_n→X_n|σは全単射} とおく。 A_nを偶置換全体からなるS_nの部分群とする。ρ∊S_nは奇置換であるとし、 ρA_n={ρσ∊S_n|σ∊S_n} とおく。 この時、「φ(σ)=ρσ(σ∊A_n)で定まる写像φ:A_n→ρA_nが全単射である。」 とあるのですが、ここの部分がよくわかりません。 単射であることは以下のように証明してみました。 「σ、σ’∊A_nとして、ρσ=ρσ’ならば、両辺にρ^(-1)を左から作用させるとσ=σ’」 全射についてうまく証明することができません。 どのようにすればよいのか教えていただけると助かります。
- 締切済み
- 数学・算数
- 文字列の置換
JAVAであるファイル内の文字列を置換するプログラム(日本語)を作りたいのですが、 ・ ・ String h_s; FileReader h_fr = new FileReader(in_filename); BufferedReader h_br = new BufferedReader(h_fr); while(true){ h_s = h_br.readLine(); if (h_s == null){ break; } ●文字列を置換するプログラム● } ・ ・ ここの●文字列を置換するプログラム●にあたる適当な関数って何かありますか? たとえばperlでいうと↓みたいなものなのですが・・・ s/置換前文字/置換後文字/g よろしくお願いします。
- ベストアンサー
- Java
- Perlのs///を使った置換で質問です
s///のパターンマッチ演算子を使った置換で、 <br>→<br /> に置換するときははどうしたらいいのでしょうか? ↓これでは<br />の/が引っかかってできないようです・・・。 $content =~ s/<br>/<br />/g;
- ベストアンサー
- Perl
- 要素数が多い置換についてです
こんにちは。perl超初心者です。 似たような質問が以前にもあったらすみません。 あるデータ内で、特定の文字列があった場合、その一部を置換して出力したいのですが、 0ab:P, 10ab:S, 20ab:D ↓以下に置換したいです 0ab:D, 10ab:S, 20ab:D 以下のように、そのまま式に当てはめてもうまくいきません。 $str =~ s/0ab:P, 10ab:S, 20ab:D/0ab:D, 10ab:S, 20ab:D/g; print OUT "$str\n"; 単純にPをDに置換するという訳ではなく、 上記の条件に完全一致する時のみ置換したいです。 初心者の為、変な記述をしてるかもしれませんが、 何卒ご教授お願い致します。
- ベストアンサー
- Perl
お礼
うまくいきました! どうもありがとうございました。 本当に助かりました!感謝致します。