テキストの置換
ReplaceAllでパターンを置換します
「テキストの置換」は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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- regexpの基礎
- 検索と抽出
- テキストの置換
- パフォーマンスのヒント