perlで

  ,,(半角カンマ2個続き)
  ↓
  ,’’,(シングルクォート囲みをカンマで挟む)
の置換をしたい場合の記述はどう書けば良いですか?
tr/,,/,’’,/;
tr/,,/,¥’¥’,/;
tr/¥,¥,/¥,¥’¥’¥,/;
などを試しましたが、いずれも置換されませんでした。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答6件)

id:aki73ix No.1

回答回数5224ベストアンサー獲得回数27

ポイント5pt

$a=$a2="abcde,,tes,,t";

$a2=~s/,,/,’’,/g;

print "original=".$a."<BR>";

print "convert=".$a2."<BR>";


trではなくs を使ってみてはいかがでしょう


trは正規表現のマッチ、sは直接置換だったと思います

http://www.tohoho-web.com/lng/200001/00010525.htm

[perl] 置換で、tr と s に関する質問

id:P-mako

一部置換できました。

たとえば、

,,,

,’’,’’,

のように置換したい場合に有効な記述はありませんか?

※実際には、カンマの連続はもっとありますが、すべてNULLを’’にしたいというイメージです。

2005/12/26 13:07:21
id:ootatmt No.2

回答回数1307ベストアンサー獲得回数65

ポイント5pt

tr ではなく、s です。


s/,,/,’’,/

id:P-mako

ありがとうございます。

1番目の回答者の方にも同じ指摘をいただきました。

2005/12/26 13:07:40
id:dasm No.3

回答回数66ベストアンサー獲得回数0

ポイント45pt

s/,(?=,)/,’’/g


がしたいということですか?

id:P-mako

ご回答ありがとうございます。まさにそのとおりです。上手くできました。ありがとうございます。

以降、ご回答いただいているので、一応オープンします。

2005/12/26 18:49:50
id:ootatmt No.4

回答回数1307ベストアンサー獲得回数65

ポイント1pt

たぶんCSVデータの取り扱いの話だと思いますが、


http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values

一度、CSVの要素を取り出して、


値が null のものを、’’ に置換し、


http://www.din.or.jp/~ohzaki/perl.htm#CSVfromValues

再度、CSVに変換してやるのが確実でいいと思いますよ。

id:P-mako

置換の記述の問題だけだと思っている(実際そうでした)ので、この手の回答は不要です。

2005/12/26 18:50:37
id:tebukuro No.5

回答回数56ベストアンサー獲得回数2

ポイント43pt

s/,(?=,)/,’’/g でどうでしょうか。

古いバージョンのperlだと動かないかもしれません。

またこういうケースでは、必ずしも置換ではなく

split等を組み合わせるとよいかもしれません。

id:P-mako

未オープンだった3つ目の回答と同じですね。そのとおりです。ありがとうございました。

2005/12/26 18:51:11
id:Mars No.6

回答回数203ベストアンサー獲得回数20

ポイント1pt

置換というよりカンマで分割、空文字列か判定、再結合してみてはどうでしょうか


$data =q|,,,abc,def,,g,,|;

$result = ’’;


$result = join ’,’,map{($_)?$_:”’’”} split /,/,$data,-1;


print $result; # →’’,’’,’’,abc,def,’’,g,’’,’’

id:P-mako

そんなに小難しいことは必要ないです。

2005/12/26 18:51:36
  • id:ootatmt
    それでいいのか

    先頭とか最後は考えなくていいのか?
  • id:dasm
    Re:それでいいのか

    >先頭とか最後は考えなくていいのか?
    カンマとカンマの間を置換、という質問だったのでそういう回答をしました。
    先頭と最後を考えるは簡単でしょう?
    s/^,/’’,/
    s/,$/,’’/
  • id:dasm
    Re(2):それでいいのか

    全部まとめて一つの置換で済ませたかったら

    s/(^|,)((?=,)|$)/$1’’/g

    のような書き方もできると思いますが、汚い上に確かめるのが面倒なのでしなかっただけです。
  • id:ootatmt
    Re(3):それでいいのか

    次の質問では、行頭とか行末も考慮することになってるわ。w

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません