31
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

各行の一番最初にヒットした1文字だけを置換する

Posted at

テキストデータを編集する時、サクラエディタやSublime Textの正規表現置換を多用しています。
今回悩んだのは「各行の一番最初にヒットした1文字だけを置換する」パターンです。
※ 試行錯誤の結果ですので、もっとスマートな方法があれば教えてください。

具体例

次のようなデータがあるとします。

AAABAAABBAAAA
BCCCCBCCCCCCB
DBBDBDDDDDBBB

このデータ内の B を置換したいと思います。
普通に検索すれば、すべての B がヒットします。

AAA B AAA BB AAAA
B CCCC B CCCCCC B
D BB D B DDDDD BBB

しかし、今回は「各行の一番最初にヒットした B だけ」を置換したいので、次のようにヒットさせたいです。

AAA B AAABBAAAA
B CCCCBCCCCCCB
D B BDBDDDDDBBB

検索条件

次の正規表現で検索します。

(^.*?)(B)

この正規表現は、2つのグループから構成されています:

  1. (^.*?) : 行頭から次に指定する文字( B )までの間の最短の文字
  2. (B) : 指定する文字

1つ目のグループは $1 (または \1 )で、2つ目のグループは $2 (または \2 )で参照することができます。

置換

B# に置換したい場合、次の置換文字列を指定します。

$1#

この置換文字列は、1つ目のグループの後ろの文字を # に置換せよ、という意味になります。
先ほどの検索条件で指定したとおり、1つ目のグループの後ろの文字は B になるので、結果的に B# に置換されます。

結果

AAA # AAABBAAAA
# CCCCBCCCCCCB
D # BDBDDDDDBBB

31
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?