3

私はGoogleシートを作成していますがREGEXREPLACE、数時間前に機能と戦っています。一般的には次のとおりです。

string1: "blah blah blah @abc blah @bcd blah blah"

そして、私はこれが欲しい:

string2: "@abc @bcd"

で抽出しようとしましたがREGEXEXTRACT(string1,"@[^\s]+")、この関数はグローバルには機能しませREGEXREPLACEん。 どうやってするか?@abc@bcd""@[^\s]+

4

3 に答える 3

4

これが役立つと思います($ 1の置換を使用):

/(?:.*?(@\S*))|(.*)/ig

[正規表現デモ]

于 2015-07-27T04:15:23.350 に答える
1

(編集)他の回答はスプレッドシートでは機能しないと提案しましたが、@ shA.tの回答を詳しく見ていませんでしたが、実際には完全に機能します。これはスプレッドシートの実装になります:

=REGEXREPLACE(L1,"(?:.*?(@\S*))|(.*)","$1")

私の元の答え:

残念ながら、スプレッドシート関数の正規表現で「先読み」をサポートしていないGoogleスプレッドシートのコンテキストでは、他の回答は機能しないと思います。

これが機能するかどうかを確認します。

=ArrayFormula(TRIM(JOIN(" ",IFERROR(REGEXEXTRACT(SPLIT(L1," "),"^@.+")))))

于 2015-07-27T23:38:38.177 に答える
0

ありがとうshA.t ...私は、必要なものを含めて、シートで使用されるRE2の制限に遭遇することにより、Googleシートを使用してデータフィールドを抽出するJSONファイルで同様のことをしようとしていました。REGEXREPLACEを使用して、私が望まないものを除外することは魅力のように機能し、完璧になるまで試行錯誤によって置き換えられました

=REGEXREPLACE(L1,"(?:.*?{("guid":".*?")})|(.*)","$1")

デモ

よく見てみると、ヘッダーも削除したかったので、最終的な RE2 はさらにシンプルになりました。

(?:.*?:(".*?"))|(.*)

デモ

于 2016-08-30T10:26:09.583 に答える