- 締切済み
条件を指定しての置換
Perlでの文字置換の質問です。以下のように文字列があった場合に +AAA a01 name +BBB b01 name +CCC c01 name +DDD d01 name ・ ・ +CCCと+DDDの間にあるnameの文字のみaddressに置換したい時は どのようにPerlで記述したらよろしいでしょうか。 全てのnameがaddressになってしまい困っています。 よろしくお願いします。 完成形↓ +AAA a01 name +BBB b01 name +CCC c01 address +DDD d01 name
- kenkenaoao
- お礼率25% (1/4)
- Perl
- 回答数4
- ありがとう数19
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
ここでは if の条件で使われているので, 件の URL にある「フリップフロップ演算子」の方>#3. 意味は「左にある条件が成り立ってから右にある条件が成り立つまでの間」です. 今は s/// if /\+CCC/ .. /\+DDD/; なので「/\+CCC/ が成り立ってから /\+DDD/ が成り立つまでの間 s/// を実行する」という意味になって, 結局「/\+CCC/ にマッチする行から /\+DDD/ にマッチする行までに対して s/// で置換する」ということになります. ただ, 「パターンとして覚える」なら s/// if /\+CCC/ ... /\+DDD/; と . をもう 1つ加えた方が安全かも.
- pick52
- ベストアンサー率35% (166/466)
> ちなみに(/\+CCC/../\+DDD/)この中の..はどういう意味ですか。 これは範囲演算子では? print "$_\n" foreach(0 .. 10);
- pick52
- ベストアンサー率35% (166/466)
+CCCと+DDDの間にあるnameは1つのみですか? また、+CCCと+DDDは残しますか? 恐らくはもっと効率のいい方法があると思いますけど(そもそも書き方 間違っている可能性大です)こんな感じで。 my $str = <<'TEXT'; +AAA a01 name +BBB b01 name +CCC c01 name +DDD d01 name ・ ・ TEXT $str =~ s/(?=\n)?(?=\+CCC\n)(.*?)(name)(\n.*?)*?(?<=\n\+DDD)(?<=\n)?/$1address$3/gs; print $str; exit;
- sakusaker7
- ベストアンサー率62% (800/1280)
s/name/address/ if (/\+CCC/../\+DDD/); なんてので。 ^を追加するとかはお好きに。
関連するQ&A
- テキストファイルの一部置換したファイルをたくさん作りたい
テキストファイル(a.txt)があるのですが このファイルの一部の文字列aaaをbbbに置換したファイル(b.txt)を作りたいです。 また文字列aaaをcccに置換したファイル(c.txt)も作りたいです。 続けてd.txtやe.txt・・・と作っていきたいですが簡単にできるフリーソフトはないでしょうか? 現状はa.txtを開いてaaaをbbbに置換して、別名で保存するのを繰り返し(10回以上)するので大変です。 このようなことが楽にできるフリーソフトがあれば教えてください。
- 締切済み
- フリーウェア・フリーソフト
- エクセルの文字処理
以前に同じ様な質問があったかも知れませんが、探しきれなかったので教えてください。 A1~A4の4つのセルに以下のスペースが入った文字列が入っていた場合 A1|AAA A2|AAA BBB A3|AAA BBB CCC A4|AAA BBB CCC DDD A B C D 1| AAA 2|AAA BBB 3|AAA BBB CCC 4|AAA BBB CCC DDD という具合にしたいのです。 条件は ・セル内にスペースで区切られない文字列があった場合には、B列に入れる ・それ以外はスペースで区切って、A列B列C列D列に入れる ・文字数は3文字固定ではなく全角半角が混在 以上です。すいません宜しく願いします。
- 締切済み
- その他(業務ソフトウェア)
- RegExpでメールアドレスを取り出す方法
いつもお世話になっております メールアドレスのString Aさん <aaa@bbb.ne.ne.jp>,Bさん <bbb@bbb.ne.jp>,Cさん <ccc@ddd.jp.com> から aaa@bbb.ne.ne.jp bbb@bbb.ne.jp ccc@ddd.jp.com を取り出すために正規表現のRegExpを用いました ですが、Pattarnに <.*> を用いると aaa@bbb.ne.ne.jp>,Bさん <bbb@bbb.ne.jp>,Cさん <ccc@ddd.jp.com がhitしてしまいます。(Global=True、Falseのどちらでも) 何とかうまく3つのメールアドレスを取得する方法はないでしょうか よろしくお願いします
- ベストアンサー
- オフィス系ソフト
- Excelでハイパーリンクの一括置換(指定範囲)
現在、Excel2002を使用しておりますが、ハイパーリンクの一括置換用マクロ作成でつまづいておりますので、詳しい方お願いします。 【Excelデータ】 A B C D …… 1 ★ ★ ★ ★ …… 2 ★ ★ ★ ★ …… 3 ★ ★ ★ ★ …… : : : : : ★マークの箇所のデータにURLの途中まで同じハイパーリンクが貼られています。 リンクはhttp://aaa.bbb.ccc/ddd/eee/… ここで、C列の1行目から最終行(約1万行)までのハイパーリンクのみ ddd→FFFとしてhttp://aaa.bbb.ccc/FFF/eee/… としたかったので、こちらのサイト検索をしてみると Sub ハイパーリンクの置きかえ() Dim H As Hyperlink For Each H In Range("B2:B101").Hyperlinks H.Address = Replace(H.Address, "\\abc", "\\def") Next End Sub という回答を見つけることが出来ました。 そこで、それを参考にして Sub macro1() Dim H As Hyperlink For Each H In Range("C1:C50000").Hyperlinks H.Address = Replace(H.Address, "ddd", "FFF") Next End Sub ※C列は約1万行なので5万行まで指定すればよいかと思い、この値にしてます。 とマクロを作成したのですが、 いざ実行してみると、C列だけではなく、他の列まで全部一括置換してしまいます。 私はC列だけを置換したいので、何か良い方法をご存知の方はお願い致します。 C列だけ他のシートにコピーして一括置換して元の場所に貼り付ける方法も考えたのですが、その方法ですと、D列を別の文字列に一括置換とかE列を更に別の文字列に置換… とした場合の応用がききませんので…
- ベストアンサー
- オフィス系ソフト
- 複数セルから同じ文字列を抽出、並べ替え
お世話になります。 セル式で定義したいのですが、いい考えが浮かびません。 A列に以下のような文字が並んでいるとします。実際は下に無制限とします。 A1 AAA A2 BBB A3 CCC A4 AAA A5 CCC A6 DDD A7 AAA これらのセル中の文字列から以下のように並べ替えてB列に配置したいのです。 B1 AAA B2 BBB B3 CCC B4 DDD 4種類の文字列となるのでB1:B4まで並べたいと思います。 B列のセルにセル式を記述したいと思います。 以上、ご教授下さい。
- ベストアンサー
- オフィス系ソフト
- 秀丸の正規表現を使って置換
三番目の引数が0かNULL、nullならば、以下のように秀丸で置換したいのですが、やり方がわかりません。正規表現を使って置換したいです。 abcmethod(aaa, bbb, 0, ccc)やabcmethod(aaa, bbb, null, ccc) ↓↓↓↓↓↓ abcmethod(aaa, bbb, ccc) aaa,bbb,cccは任意の文字半角アルファベットや数値です。 abcmethod(.+,.+,.+,.+)で、検索できますが、置換の仕方がわかりません。 どうぞよろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- C言語でのファイル検索&ファイル書き換えについて
C言語である特定のフォルダを指定して、その階層内(サブフォルダも含む)にあるファイル、例えばsample_nameをファイル名に含むファイルを見つけ、そのファイル内の例えば下のような書き換えを行えるようなプログラムはどうつくればいいのでしょうか。 元ファイル ~sample_name1.txt~ aaa, 10 bbb, 20 ccc, 30 ~sample_name2.txt~ aaa, 30 ccc, 12 bbb, 20 ddd, 15 上のように各ファイルにaaaやbbbが共通に含まれています。 対象ファイル:sample_name 対象文字列:aaa 変換後:100 変換後ファイル ~sample_name1.txt~ aaa, 100 bbb, 20 ccc, 30 ~sample_name2.txt~ aaa, 100 ccc, 12 bbb, 20 ddd, 15
- ベストアンサー
- C・C++・C#
- csvデータの置換について
お世話になります。 batファイルを利用してcsvファイルの数値の置換をしたのですが、ご教授下さい。 詳細は下記になります。 【環境】 Windows2008 Server 【対象ファイル】 test.csv 【実施内容】 ファイルの内容は下記になります。 A,111,aaa B,222,bbb C,333,ccc D,444,ddd E,555,eee 上記の内容で数値を下記のように置換したい。 111は111F 222は222G 333は333H 444は444I 555は555J よろしくお願い致します。
- 締切済み
- オフィス系ソフト
- emacsのreplace-regexpで改行を指定する方法
例えば aaa, bbb, ccc, ddd, eee のような文字列の ","を改行に置換して aaa bbb ccc ... のようにする操作で(query-)replace-regexp<ESC %>を使って行いたいのですが、RETURNを指定するにはどのようにしたら良いのでしょうか? ESC % とうちこみ、 Query replace , with: <RETURN> と単純に入力しただけではうまく行きません。。。 以上宜しくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
お礼
ありがとうございました。 できました!! ちなみに(/\+CCC/../\+DDD/)この中の..はどういう意味ですか。