Googleドキュメントの正規表現置換でキャプチャグループのテキストを使用する方法


11

特定のテキストを照合してから、テキストといくつかの余分な文字で置き換えようとしています。最小限のサンプルテキスト:

#10 Oranges. These are citrus fruits

望ましい出力:

#10 Oranges. These are citrus fruits

正規表現: (#\d{1,2}[^.]*\.)\s*

と置換する: $1\n

Match using regular expressions確認しました)

正規表現が正常に一致し#10 Oranges.ます。ただし、番号付きの後方参照は、テキストをキャプチャグループで置き換えるのではなく、文字どおりに入ります(文字どおりの出力はです$1\n)。また、番号付きの後方参照にバックスラッシュを使用してみましたが\1、結果は同じです。

行方不明のものはありますか?正規表現を使用して、一致したテキストをGoogleドキュメントに再挿入するにはどうすればよいですか?


2
ドキュメント明示的状態:Note: Capture groups only work with Google Sheets.参照くださいsupport.google.com/docs/answer/62754#regular_expressions
ユーザー

回答:


3

短い答え

組み込みの検索と置換機能を使用する代わりに、Google Apps Scriptまたはアドオンを使用します。

説明

Googleドキュメントの検索と置換機能では、置換パーツは正規表現では機能せず、Google Apps ScriptのドキュメントサービスのreplaceText()メソッドでも機能しません。幸い、JavaScriptのreplaceメソッドは機能します。

単純なスクリプトを作成するための基本については、https://developers.google.com/apps-script/overviewを参照してください。

コード

このコードは、参考文献に含まれているものを改変したものです

function myFunction() {
  var body = DocumentApp.getActiveDocument().getBody();
  var paragraphs = body.getParagraphs();
  for (var i=0; i<paragraphs.length; i++) {
    var text = paragraphs[i].getText();
    paragraphs[i].replaceText(".*", 
       text.replace(/(\d{1,2}[^.]*\.)\s*/gi, '$1\n') );
  }
}

参考文献


3
私はこれを検討することを検討しますが、置換が正規表現で機能しないという事実はバグですか?このドキュメントによると、正常に機能するようです:support.google.com/docs/answer/62754#regular_expressions(セクションを参照Replace with regular expressions
User

2

少しハッキーですが、追加のスクリプトを追加する必要がなく、ユースケースの99%をカバーする可能性があります。RegexReplace置換グループ内の参照でキャプチャグループを使用することも、$1またはで置換することもできます$2。正規表現を2つのキャプチャグループに分割し、などのランダムな(使用頻度の低い)文字と連結するだけ~です。その後、戻り値全体を取得~して改行で置き換えることができます。

=SUBSTITUTE(REGEXREPLACE(A1,"(#\d{1,2}[^.]*\.)(\s*)","$1~$2"),"~",CHAR(10))

スクリーンショット

Googleシートで使用される正規表現構文の詳細については、re2仕様を参照してください


問題は、私が理解している限り、スプレッドシートではなくドキュメントについてです。
törzsmókus

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.