KojiDoiさんも書かれてますが、REGEXEXTRACT
の公式の説明に「正規表現と最初に一致する部分文字列を抽出します」と記載がある通り、最初の1件のみを抽出するのは仕様なのです。
https://support.google.com/docs/answer/3098244?hl=ja
ただ、説明ページ内に同じく記載の通り「キャプチャ グループ」が使えるので、
仮に、正規表現を正しく打てば実現可能でしょうか?
という質問に対しては、複数対象であっても「一応可能です」という回答になります。
たとえば、
GoogleSheets
1A2 = "〇〇線「あいう駅」徒歩●分、〇〇線「かきく駅」徒歩●分、〇〇線「さしす駅」徒歩●分"
2
3B2 =REGEXEXTRACT(A2, "^.*?(「.+?」).*?(「.+?」).*?(「.+?」).*?" )
とすれば、希望する動作にはなります。でも、駅の数は変動だと思うので微妙ですよね。
ちなみに上記は 「○○駅」が3つより少ない場合はエラーになりますし、4つ以上の場合は4つ目以降は抽出されません。
というわけで、もう少しマシな方法を回答しておきます。
本当は gフラグが使えればいいのですが、残念ながらシート関数で扱える正規表現では対応していないので、少し工夫する必要があります。
REGEXEXTRACT
と同様に正規表現を扱える関数に REGEXREPLACE
があるのですが、こちらを活用する方法がおススメです。
https://support.google.com/docs/answer/3098245?hl=ja&ref_topic=3105625
公式に記載の通り、こちらは「正規表現に一致するテキスト内のすべてのインスタンスが置き換えられます」ということで一致したもの全てを対象にできますし、公式に記載されてないですが、こちらもキャプチャグループを使うことができます。
というわけで、REGEXREPLACE
を使って
..任意の文字列「○○駅」..任意の文字列 という塊を
↓
「○○駅」 と、該当の文字列だけ残すように置き換えるという処理をすれば良いのです。
ただ、これだけだと抽出後が 一つのセルに"「あいう駅」「かきく駅」「さしす駅」" と、繋がって抽出されてしまうので、もう一工夫必要です。
最終的に式としては以下のような感じ。
GoogleSheets
1A2 = "〇〇線「あいう駅」徒歩●分、〇〇線「かきく駅」徒歩●分、〇〇線「さしす駅」徒歩●分"
2
3B2 =SPLIT(REGEXREPLACE(A2,".*?(「.+?」).*?|.*?$","$1,"),",")
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/06 09:54