
active perl v5.8を使用しています。
文字列のマッチングと置換について質問させてください。
たとえば"ABCDEF"という文字列があったとします。この文字列の3文字目の
後に"-"(スペースバー)を入れたいと思います。"ABC-DEF"のように。
この場合文字の種類ではなく、文字の位置から置換する対象を決めること
にしたいのです。
正規表現をつかい3文字目を見つけ、3文字目 + "-"に置換すればよいと考えました。
my $seq = "ABCDEF";
$seq =~s/.{2}(.)/$1-/; #3番目の文字を(.)に入れて記憶
としたのですが、こうすると(C-DEF)のように初めのほうの文字が消えてしまいます。(スクリプトを見直してみると当然なのですが。。。)
後方参照という方法で
$seq =~s/.\3/$1-/;
というふうにもしたのですが、
"Reference to nonexistent group in regex"と\3をリファレンスとして
とられてエラーになりました。
このような場合、どうすればヒットした文字のみを置換できるでしょうか。
非常に基本的なことなのですが、参考書やウェブではなかなか見つからな
かったもので。。。。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
質問をざっと読んだところ、求めるところは置換ではなくて挿入ではないかと
思うのですが違いますか?
であるなら、正規表現での置換よりも substr 関数を使ったほうが
効率がよいのではないかと思います。
use strict;
my $str = 'ABCDEF';
substr($str, 3, 0, '-');
print $str;
実行例:
ABC-DEF
substrはなにか文字列を取り出すことにしか使ったことがありませんでした。
0指定で文字の置き換えもできるんですね。これはシンプルにわたしのした
かったことができました。
ありがとうございました。
No.4
- 回答日時:
正規表現でいくなら
seq =~ s/^(.{3})/$1-/;
ですね. なんで .{2}(.) にしたのかが理解できん.
"^"をつけて頭から3文字というふうにすればよかったんですね。
>なんで .{2}(.) にしたのかが理解できん.
見返してみると変ですね。。。。
「n文字目を括弧にはさんで$1に記憶」というのが大前提にあって、
そのために書いたのですが、そちらのスクリプトのほうがシンプルで
合理的ですね。
No.3
- 回答日時:
以下のページにカンマを3桁区切りで挿入する正規表現が載っていますので参考にして下さい。
http://www.din.or.jp/~ohzaki/perl.htm#NumberWith …
しかし、#2で述べられているように、正規表現よりもsubstrを使用したほうが簡単かつ高速です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- Excel(エクセル) 数式の置換がうまく行かない 6 2022/05/04 15:51
- その他(コンピューター・テクノロジー) 正規表現の置換で一部の文字列をそのまま残したい 2 2022/05/03 19:19
- Perl perlについての質問 2 2022/10/17 15:25
- 政治 私の発明した「二階建て漢字」は使えるでしょうか? 3 2023/02/08 16:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現で、特定の文字列を含...
-
正規表現でテキストの中身を置...
-
python 大文字小文字を区別しな...
-
\\(円)記号を置換したい
-
【至急!!!!!】ランダム桁数を正...
-
csvデータのダブルクォーテーシ...
-
テキストファイルの文字操作の仕方
-
csvデータ ダブルクォーテ...
-
Dream Weaver で
-
フォントの色を保持したままセ...
-
商品詳細テンプレートを元に、...
-
秀丸で正規表現による置換
-
VBA 置換文字がみつからない時
-
MKエディタやサクラエディタを...
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
住宅にカナを入力する際に丁目...
-
VBA 文字に半角が含まれて...
-
文字コードの%E3%80%とは何です...
-
Visual Studioで ユニコード "...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 置換文字がみつからない時
-
正規表現で、特定の文字列を含...
-
csvデータ ダブルクォーテ...
-
各項目がダブルクォーテーショ...
-
Excel VBA リストに一致したデ...
-
スペースで区切られた氏名から...
-
秀丸エディタで、「-」や「ー」...
-
EXCELマクロを用いてグラフの系...
-
csvデータのダブルクォーテーシ...
-
C#で空白行を削除する方法
-
EXCEL警告「置換対象のデータが...
-
xmlファイル内の文字列置換
-
テキストボックスの文字列を置...
-
正規表現 特定の文字列を含む行...
-
○文字目に文字挿入
-
C言語でテキストファイルの内容...
-
複数のパワーポイントファイル...
-
c# ビルド直前にコードを置換で...
-
Excel・ユーザーフォームの情報...
-
\\(円)記号を置換したい
おすすめ情報