質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

7222閲覧

行頭のタブ文字を空白に一括置換したい

jawa

総合スコア3013

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2015/09/07 06:07

テキストエディタの正規表現置換機能を利用して、ソースコードの行頭のタブ文字を空白4文字に一括置換したいです。
行頭がタブ1個なら空白4文字、タブ2個なら空白8文字、というようにネストの段組みが残るような置換を期待しています。

現状、下記の置換を複数回(置換できなくなるまで)繰り返すことで目的を達しています。

検索文字:"^( *)\t" 置換文字:"\1 "

しかしネストの深いソースコードの場合、この繰り返し操作が非常に面倒です。
(深すぎるネストというのがそれ自体お粗末ではあるのですが。)

そこで、繰り返し操作をせず、1回で置換できる正規表現の記述方法があればご教授いただきたいです。

・置換前の状態として、空白とタブの混在は考慮不要です。
純粋に行頭からタブが複数回連続しているものを一括で置換する方法で構いません。

・自分が普段の使用しているエディタはMeryですが、秀丸やサクラエディタ等、なんでも構いません。
ただし、あくまで「1回の正規表現置換でできないか?」という知的好奇心からの質問ですので、
エディタ固有の機能やプラグイン、マクロによる繰り返し操作は今回は除外させてください。

・無理であれば無理だということも知りたいです。

注文が多くて申し訳ありませんが、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

このページにつぎのコードが示されています。

ruby

1def expand_tabs(s, tab_stops = 8) 2 s.gsub(/([^\t\n]*)\t/) do 3 $1 + " " * (tab_stops - ($1.size % tab_stops)) 4 end 5end

expand_tags(String, 4) として、ファイル内容全体を変換すればよさそうです。

投稿2015/09/07 19:45

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jawa

2015/09/08 00:32

プログラムを介せば目的は達するのですが、今回はエディタ上の正規表現置換だけでなんとかならないか?と思っての質問でした。 ご回答ありがとうございました。
guest

0

ベストアンサー

エディタ固有の機能

正規表現というのは、あくまで文字列の一部にマッチさせる機能なので、「置換」ということになるとすでに正規表現では無くて、言語やツール側の機能です。

単に、"\t"" " で無いのは、行の途中にあるタブは置換したくないと言うことですよね。
また、質問文中の置換対象は^(\t*)\tのタイプミスでしょうか?

置換対象で検索正規表現の繰り返し回数を参照できるものというのは見たことが無いですね。

投稿2015/09/07 13:41

otn

総合スコア84491

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jawa

2015/09/08 00:30

質問文の検索の記述は一回で置換するための正規表現ではないため、2回目以降、既に行頭をスペースに変換済みの部分を吸収するために "^( *)\t" ⇒ "\1 "としていました。 置換の際によく利用する後方参照も正規表現の一部なので混同してしまいましたが、確かに正規表現は検索のためのもの。 置換結果に後方参照も利用できるようにしてくれているというだけで、ツールに依存する部分なのですね。 ご回答ありがとうございました。
guest

0

Linux 環境であれば、expand コマンドで、できる気もしますが、どうでしょうか?
Windows環境であれば、cygwin や unix互換コマンドを探す方法も。

投稿2015/09/07 11:29

ShinyaAnan

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jawa

2015/09/08 00:38

今回は自分に知識が足りないだけで、正規表現をうまく使えば1回の置換で目的を達せられるのか?と思っての、知的好奇心からの質問でした。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問