(Gスプレッドシート)REGEXEXTRACT関数は1つを抽出し、REGEXREPLACE関数はすべてを置き換える

 GoolgleスプレッドシートのREGEXEXTRACT関数とREGEXREPLACE関数は大変便利な関数ですが、抽出・置換の対象となる文字列の捉え方が異なりますので注意が必要です。

  • REGEXEXTRACT関数は指定した正規表現にマッチする文字列のうち最初の1つを抽出します。
  • REGEXREPLACE関数は指定した正規表現にマッチする文字列をすべて置き換えます。

手順

f:id:accs2014:20190519185132p:plain:right:w500

 B3,B4セルには同じ文字列が記録されています。
 これに対しC3,C4セルにそれぞれ次のような文字列を入力します。

 C3セル

=REGEXEXTRACT(B3,"[0-9]")

 文字列のうち半角数字(0~9)を抽出する、という内容になっています。

 C4セル

=REGEXREPLACE(B4,"[0-9]","☆")

 文字列のうち半角数字(0~9)を「☆」に置き換える、という内容になっています。
 
f:id:accs2014:20190519185129p:plain:right:w500

 さて実行結果です。
 C3セルでは半角数字のうち最初の1文字である「3」が抽出されています。
 これに沿って考えればC4セルでは文字列中の最初の数字「3」だけが「☆」に置き換えられるはずですが、実際にはすべての半角数字が「☆」に置き換えられています。
 それぞれの関数で抽出・置換の対象の捉え方が異なり、REGEXEXTRACT関数は該当する最初の1つの文字列(条件により1文字とは限りません。以下同様)を抽出し、REGEXREPLACE関数は該当するすべての文字列を置き換えるからです。
 スプレッドシートで正規表現についていろいろ試す際には、まずこの点を押さえておかないと混乱しますので注意が必要です。