Googleスプレッドシートの正規表現の数式を使用して、指定した文字列(セルA1
で例を示します)でハイフンの前にあるすべての数字のリストを取得しようとしています。
=REGEXEXTRACT(A1, "\d-")
私の問題は、最初の一致のみを返すということです...どうすればすべての一致を取得できますか?
テキストの例:
"A1-Nutrition;A2-ActPhysiq;A2-BioMeta;A2-Patho-jour;A2-StgMrktg2;H2-Bioth2/EtudeCas;H2-Bioth2/Gemmo;H2-Bioth2/Oligo;H2-Bioth2/Opo;H2-Bioth2/Organo;H3-Endocrino;H3-Génétiq"
私の数式は1-
を返しますが、1-2-2-2-2-2-2-2-2-2-3-3-
を(配列または連結テキストとして)取得したいのですが。
スクリプトまたは別の関数(SPLIT
など)を使用して目的の結果を達成できることは知っていますが、本当に知りたいのは、re_正規表現を使用して、このような複数の一致を "REGEX.*
"Googleスプレッドシートの数式。 「gのような何か-最初に戻ってはいけない regex101.com のmatch "オプション
また、REGEXREPLACE
を使用して不要なテキストを削除しようとしましたが、成功しませんでした(ハイフンの前にない他の数字を取り除くことができませんでした)。
助けてくれてありがとう!ありがとう:)
私はより一般的な解決策を思いつきました:
=regexreplace(A1,"(.)?(\d-)|(.)","$2")
この式を試してください:
=regexreplace(regexreplace(A1,"[^\-0-9]",""),"(\d-)|(.)","$1")
次のように文字列を処理します。
"A1-Nutrition;A2-ActPhysiq;A2-BioM---eta;A2-PH3-Généti***566*9q"
出力あり:
1-2-2-2-3-
これは動作するようで、私はそれを確認しようとしました。
ロジックは
(1)ハイフンが続く文字を何も置換しない
(2)ハイフンが続かない数字を何もないものに置き換える
(3)数字でもハイフンでもないものは何もないものに置き換える
=regexreplace(A1,"[a-zA-Z]-|[0-9][^-]|[a-zA-Z;/é]","")
結果
1-2-2-2-2-2-2-2-2-2-3-3-
分析
これが正しいことを自分に納得させるために、私はこれらを手続き的に踏まなければなりませんでした。 このリファレンス によると、パイプ記号で区切られた代替がある場合、正規表現は左から右の順にそれらと一致する必要があります。上記の式は、ルール1が最初にない限り正しく機能しません(そうでない場合、ルール(1)が機能し、「Patho-jour」から追加のハイフンを取得する前に、数字またはハイフンを除くすべての文字がnullに削減されます)。
これは、テキストを処理する方法の例です。
私のケースでは、受け入れられた回答を得ることができませんでした。そのようにしたいのですが、簡単な解決策が必要で、次のようにしました:
入力:
1111 days, 123 hours 1234 minutes and 121 seconds
予想される出力:
1111 123 1234 121
式:
=split(REGEXREPLACE(C26,"[a-z,]"," ")," ")