• ベストアンサー

○文字目に文字挿入

お世話になっています。 正規表現の文字置換s///gを使って数字の3桁目に-を挿入したいですが、どうしたらいいのかわかりません。 どなたか教えていただけないでしょうか。 5770001 ↓ 577-0001 にしたいのでしが…

  • Perl
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

試してないのですが s/(.{3})(.*)/$1-$2/; でよいはずです。 数字確定ならば\dでも可。

saruyamamonki
質問者

お礼

ありがとうございます。 汎用性があり、よかったです。

その他の回答 (2)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

既に解決済みのようですが、いろんな方法を知っておいて損はないので、別の例を1つ。 $zip = "5770001"; substr($zip, 3, 0) = "-"; print $zip;   # 577-0001 substr は左辺値(代入される側)にもでき、   substr($string, $offset, $length) = $replace; とすることで、$string の $offset バイト目から $length バイト分を $replace に置き換えることができます。 上の例はこれを利用し、$length を 0 とすることで挿入を行っています。 # Perl5.005以降なら、substr($string, $offset, $length, $replace) と書くこともできます。

  • Dpop
  • ベストアンサー率51% (279/544)
回答No.1

#!/usr/bin/perl $c = '5770001'; $c =~ s/(\d\d\d)(\d\d\d\d)/$1\-$2/; print $c. "\n"; これでどうでしょうか?

saruyamamonki
質問者

お礼

即レスありがとうございます。 試した結果うまく動きました。

関連するQ&A

  • 正規表現でマッチした数字文字を計算して置換することを1行で記述できますか?

    正規表現でマッチした数字文字を計算して置換することを1行で記述できますか? たとえば 2004/01/01 --> 2004/01/17 2004/01/02 --> 2004/01/18 2004/01/03 --> 2004/01/19 $a = '2004/01/01'; $a =~ s/([0-9]{4})\/([0-9]{2})\/([0-9]{2})/\1\/\2\/???????/; ?????の部分です。

    • ベストアンサー
    • Perl
  • メタ文字の置換

     いま、半角の[が含まれているテキストがあります。  このテキスト中の[を、別の文字に置換したいと思っています。具体的には、全角の【に置換したいのですです。  [は正規表現上メタ文字になるためか、うまくいかないのです。マッチしないのです。s/でもtr/でもだめなんです。  どなたか、[を【に置換する表現を教えてください。

  • 謎の文字列置換(正規表現)

    漢字かな、アルファベット(全角)、数字(半角)の混在した文章中で、二桁の数字のみ文字の前後に記号(例:♪)を付けたいとします。 正規表現に対応した置換ソフトやテキストエディタで 置換前:\b(\d{2})\b 置換後:♪$1♪ とすると、特定の文字の後ろにある二桁数字のみ検索から漏れて置換されないのですが、どこが間違っているのでしょうか。 <使用したテキストエディタ> k2editor <使用した置換ソフト> Speeeeed <置換から漏れる特定文字> 学、浜、工、田、修など <具体例>置換前 23 学23 23学 2323 浜23浜 <具体例>置換後 ♪23♪ 学23 ♪23♪学 2323 浜23浜

  • 正規表現で全角数字を半角数字に置換する方法は?

    いつもお世話になっております。 テキスト内の全角数字5桁のみを該当の半角数字5桁に置換する方法を探しています。 OS:Win テキストエディタ:sakuraエディタ、秀丸 例) ---------------------------------------- あいうえお01234かきくけこ99さしすせそ ↓ あいうえお01234かきくけこ99さしすせそ ---------------------------------------- 正規表現で行えばいいと思い、置換文字列を  [0-9][0-9][0-9][0-9][0-9] あるいは  [0-9]{5} にしましたが、置換後の文字列が分かりません。 試しに検索で上記の文字列を試すと、該当箇所がマークされるので、 置換前の文字列は合っています。 置換後の文字列をご教授願えますでしょうか。 ※テキストエディタで無理ならプログラム組みます。 VBScriptを考えていますが、他に良い言語があれば併せて教えてください。

  • 文字の挿入

    こんにちは テキストエリアに好きな言葉をガンガン書いていってPOSTした データに例えば3行ごとに特定の文字を挿入する というような ことは果たして出来るのでしょうか? あいうえお かきくけこ さしすせそ 特定の文字ですよ たちつてと … ↑のような感じのことです 正規表現を使えばなんとかなるものなのか、実現不可能なのか どうにも判断出来ないので宜しかったら教えて頂けますか??

    • ベストアンサー
    • PHP
  • word vba 文字置換について

    お世話になります。 word vba による文字置換についてお聞きしたいのですが、 例えば「あいう,1えお2,345かきく,6けこ」 というテキストがあった場合、 「,1」と「,6」を全角に変換したいと思っております。(カンマも含め) 独立したカンマ+数字(数字はランダム)を全角変換は難しいでしょうか。 数字はランダムなので、正規表現を使用したいと思っております。 何か良い方法はないでしょうか。 ご指導のほど、よろしくお願いします。

  • 正規表現を教えて下さい(テキストエディタでの置換)

    いつもお世話になっております。 正規表現に関して細かい質問をさせて下さい。 例えば、G-01,T-02,F-05とあったときに、 これを、01,02,05としたいとき、 正規表現の置換で「[A-Z]-[0-9][0-9]」→「[0-9][0-9]」とすると、 "[0-9][0-9]"という文字列だけ残ってしまいます。 既存の文字列をそのまま残すにはどのようにしたらよいでしょうか? ※テキストエディタでの置換に関してです。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • ["]でくくられた文字列内に存在する[,]をsedで処理する正規表現について

    PostgreSQLを使うのは初心者です。 csvファイルよりCOPYコマンドを使ってPostgreSQLのテーブルにデータを入れようとしています。 もとになるcsvファイルは、データの区切りは[,]であり、文字列は["]でくくられ、さらに["]でくくられた文字列には[,]が存在します。 <csvデータ例> 123,"aaa","b,cde",234 いろいろ調べてみた結果、COPYコマンドを実行する前に、sedコマンドで正規表現を用いて置換をすればよいとの結論にたどり着いたので、 (1)["]でくくられた文字列内の[,]を[#]に置換する  → [123,"aaa","b,cde",234] => [123,"aaa","b#cde",234] に置換したい (2)["]を除く(sed 's/\"//g')  → [123,"aaa","b#cde",234] => [123,aaa,b#cde,234] に置換したい (3)[,]をtabに置換する(sed 's/,/\t/g')  → [123,aaa,b#cde,234] => [123 aaa b#cde 234] に置換したい (4)[#]を[,]に置換する(sed 's/#/,/g')  → [123 aaa b#cde 234] => [123 aaa b,cde 234] に置換したい を順番に行う処理を考えていますが、(1)で記述する正規表現がわかりません。 正規表現も初めて扱う初心者ですので、色々試してみましたが、うまく置換できません。 どなたかご教授の程をお願いします。 なお環境は、RedHatLinux9 + PostgreSQL-7.4.9です。 以上、宜しくお願い申し上げます。

  • 複数のテキストの末尾に文字列を挿入

    複数のテキストファイルがあり、その末尾に文字列を挿入したいのです。 つまり、EOFの直前に、全てのテキストファイル(具体的には、PHPなどのファイル)に決められた文字を入れたいのですが、そのようなソフトウェアはありますでしょうか? 色々さがして、正規表現で複数ファイルの置換ができる、というソフトでも試してみたのですが「EOF」を示す「\z」はどうやら認識してくれないらしく…… もし、そのようなソフトや方法などを知っておられましたら、お教えください。 よろしくお願いします。

  • テキストファイルに固定文字挿入

    テキストファイル"A.csv"があります。 3個目の「,」の後に数字6桁が入っています。 他の項目は桁数可変ですが、この部分は6桁固定です。 ex. あああああ,AAA,090523,ああああああ いい,BBBBB,090101,いいいい この"090523"を"09/05/23"と置換(2桁おきに"/"を挿入)したいのですが、スキルがないため方法がわかりません。 すでにあるファイルを処理するのであれば、Excel読み込み後に置換処理などでなんとかなると思いますが、日次で毎日ファイルが作成されるため、自動的に処理したいのです。 VBS、バッチなどのプログラムで一括で処理できないでしょうか。 お力添えをいただければありがたいです。 よろしくお願いいたします。

専門家に質問してみよう