例:
A2 -> What a beautiful day! #sunday #summer
B3 -> #news Stay tuned for our next contest! #something
Desired output on B2 ->#sunday #summer
Desired output on B3 ->#news #something
私が見つけた最も近いものはREGEXEXTRACTですが、#で始まる最初のWordのみを配信します。
=REGEXEXTRACT(A2;"#[A-z0-9]+")
regexextract
配列を返すことができます ですが、いくつあるかを知る必要があるため、これは役に立ちません。 regexextract
のこの制限を回避する方法は、regexreplace
を使用して、do n'tが欲しいテキストを取り除くことです。 。このような:
=trim(regexreplace(A2, "(^|\s)[^#]\S*", ""))
正規表現は、#で始まらない単語に一致し、空の文字列に置き換えます。トリム機能は、残っている可能性のある余分なスペースをクリーンアップします。
上記の例では問題なく動作しますが、より複雑な状況ではいくつかの欠陥があります。
Breaking #news-in just now! A new photo #contest! Code name #as_shot (important underscore here). #something.
上記のコマンドは戻ります
#news-in #contest! #as_shot #something.
ハッシュタグに-!.
を含めることができないことを認識していません(「Word文字」、A-Za-z0-9_に制限されています)。そのため、クリーンアップするには別の正規表現が必要です。両方を1つのコマンドに入れます。このようなregexreplace
のネストは非常に一般的です。
=regexreplace(trim(regexreplace(A2, "(^|\s)[^#]\S*","")), "[^#\w\s]\S*", "")
外部置換は、\w
でも#でもない最初の文字からハッシュタグの部分を削除します。出力には正しいハッシュタグがあります:
#news #contest #as_shot #something
上記の両方の正規表現を代替として与えることで、両方のregexreplace
コマンドを1つにまとめることができるようです。この組み合わされた正規表現のロジックは従うのが難しいですが、私が試したすべての例で機能しました。
=trim(regexreplace(A2, "((^|\s)[^#]\S*)|([^#\w\s]\S*)", ""))