Go Academy · レッスン

テキストの置換

ReplaceAllでパターンを置換します

レッスン 3/413 ステップ

「テキストの置換」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

パターンに基づく置換

正規表現は、検索だけでなくテキストの書き換えにも使用できます。ReplaceAllStringは、すべてのマッチを置換文字列に置き換えます。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.ReplaceAllString("a1b2c3", "#"))
}

単語全体の置換

cat|dogのようなパターンを使うと、複数の選択肢を1回の処理で置き換えられます。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("cat|dog")
    fmt.Println(re.ReplaceAllString("my cat and dog", "pet"))
}

空白の集約

よくあるクリーニング処理として、\s+を使い、連続する空白を1つのスペースに置き換えます。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("\\s+")
    fmt.Println(re.ReplaceAllString("too   many    spaces", " "))
}

グループを参照する

置換文字列では、$1が最初のキャプチャグループを、$2が2番目のキャプチャグループを挿入します。これにより、マッチした部分の順序を入れ替えられます。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\d+)-(\\d+)")
    fmt.Println(re.ReplaceAllString("12-34", "$2-$1"))
}

名前付きグループ参照

名前付きグループでは、明確さのために置換文字列内で ${name} を使用できます。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(?P<y>\\d{4})-(?P<m>\\d{2})")
    fmt.Println(re.ReplaceAllString("2026-05", "${m}/${y}"))
}

安全な波括弧参照

グループ参照の後にテキストが続く場合は、${1} のように波括弧を使ってください。$1 がより長い名前の一部として解釈されるのを防げます。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\d+)")
    fmt.Println(re.ReplaceAllString("7", "${1}px"))
}

リテラル置換

ReplaceAllLiteralString は $ 参照を無視し、置換文字列を記述したとおりに挿入します。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.ReplaceAllLiteralString("a1", "$money"))
}

関数で置換する

ReplaceAllStringFunc は各マッチに対して関数を呼び出し、その戻り値で置き換えます。これにより、計算による置換が可能になります。

package main

import (
    "fmt"
    "regexp"
    "strings"
)

func main() {
    re := regexp.MustCompile("[a-z]+")
    out := re.ReplaceAllStringFunc("go is fun", strings.ToUpper)
    fmt.Println(out)
}

計算による置換

関数内では各マッチを自由に変換できます。ここでは、マッチした数字列を囲み、その内容を2回繰り返しています。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    out := re.ReplaceAllStringFunc("id5 and id9", func(m string) string {
        return "<" + m + ">"
    })
    fmt.Println(out)
}

機密データのマスキング

実用例として、ログに記録する前に、カード番号のような数字列をマスキングします。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("\\d{4}")
    fmt.Println(re.ReplaceAllString("card 1234 5678", "****"))
}

バイトを扱う

ReplaceAll のようなバイトスライス版もあり、バイナリデータやバッファデータに対して文字列用メソッドと同じように使えます。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    out := re.ReplaceAll([]byte("a1b2"), []byte("#"))
    fmt.Println(string(out))
}

確認問題

置換文字列に最初のキャプチャグループを挿入するには、どうすればよいでしょうか。

まとめ:テキストの置換

テキストを書き換える方法を学びました。

  • ReplaceAllString はマッチを置き換えます。$1 と ${name} でグループを参照します。
  • ReplaceAllLiteralString は展開を行いません。
  • ReplaceAllStringFunc は各置換内容を計算します。
package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\w+)\\s(\\w+)")
    fmt.Println(re.ReplaceAllString("Ada Lovelace", "$2, $1"))
}
無料で開始

AI チューターと学ぶ Go — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
51
レッスン
203

よくある質問

「テキストの置換」レッスンは無料ですか?

はい。「テキストの置換」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「テキストの置換」で何を学びますか?

ReplaceAllでパターンを置換します ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「テキストの置換」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. regexpの基礎
  2. 検索と抽出
  3. テキストの置換
  4. パフォーマンスのヒント
← Go Academyに戻る