Bagaimana cara menggunakan teks dari mengambil grup dalam penggantian regex Google Documents?

12

Saya mencoba mencocokkan teks tertentu dan kemudian mengganti dengan teks ditambah beberapa karakter tambahan. Contoh teks minimal:

#10 Oranges. These are citrus fruits

Output yang diinginkan:

#10 Oranges. These are citrus fruits

Regex: (#\d{1,2}[^.]*\.)\s*

Ubah dengan: $1\n

(Saya sudah Match using regular expressionsmemeriksa)

Regex berhasil dicocokkan #10 Oranges.. Namun backreference bernomor tidak menggantikan teks dengan grup tangkap tetapi hanya berjalan secara harfiah (output literal $1\n). Saya juga telah mencoba menggunakan backslash untuk backreference bernomor \1dan hasilnya sama.

Apakah ada sesuatu yang saya lewatkan? Bagaimana cara memasukkan kembali teks yang cocok di google docs menggunakan ekspresi reguler?

Pengguna
sumber
2
Dokumen sekarang secara eksplisit menyatakan: Note: Capture groups only work with Google Sheets.Lihat support.google.com/docs/answer/62754#regular_expressions
Pengguna

Jawaban:

4

Jawaban singkat

Alih-alih menggunakan fungsi temukan dan ganti bawaan, gunakan Google Apps Script atau add-on.

Penjelasan

Pada fitur Temukan dan Ganti Google Documents, bagian Ganti tidak bekerja dengan ekspresi reguler dan tidak berfungsi dengan replaceText()metode dari Layanan Dokumen di Google Apps Script untungnya JavaScript menggantikan metode berfungsi.

Untuk mempelajari dasar-dasar pembuatan skrip sederhana, lihat https://developers.google.com/apps-script/overview

Kode

Kode ini merupakan adaptasi dari yang termasuk dalam referensi

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') );
  }
}

Referensi

Rubén
sumber
3
Saya akan mempertimbangkan untuk melihat ini, tetapi apakah fakta bahwa penggantian tidak berfungsi dengan regex bug? Menurut dokumentasi ini, sepertinya berfungsi: support.google.com/docs/answer/62754#regular_expressions (lihat bagian Replace with regular expressions)
Pengguna
2

Sedikit hacky, tetapi tidak memerlukan tambahan skrip dan kemungkinan akan mencakup 99% dari kasus penggunaan Anda. Anda masih dapat menggunakan grup tangkap dengan RegexReplacedan referensi dalam teks ganti dengan $1atau $2. Cukup bagi regex Anda menjadi dua kelompok tangkap dan gabungkan dengan karakter acak (jarang digunakan) seperti ~. Kemudian Anda dapat mengambil seluruh nilai yang dikembalikan dari itu dan menggantinya ~dengan baris baru:

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

tangkapan layar

Untuk info lebih lanjut tentang sintaks regex yang digunakan di google sheets, lihat spesifikasi re2

KyleMit
sumber
pertanyaannya adalah tentang Documents, bukan Sheets, sejauh yang saya mengerti.
törzsmókus