Google Dokümanlar normal ifadesinde yer alan grupları yakalamaktan metin nasıl kullanılır?


12

Belirli metni eşleştirmeye ve sonra metin artı bazı ekstra karakterlerle değiştirmeye çalışıyorum. Minimum örnek metin:

#10 Oranges. These are citrus fruits

Istenilen çıktı:

#10 Oranges. These are citrus fruits

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

Şununla değiştir: $1\n

( Match using regular expressionsKontrol ettim)

Normal ifade başarıyla eşleşir #10 Oranges.. Bununla birlikte, numaralı geri başvuru metnin yakalama grubuyla değiştirilmediğini, yalnızca kelimenin tam anlamıyla girildiğini (gerçek çıktı $1\n). Ben de numaralı backreference için ters eğik çizgi kullanmayı denedim \1ve sonuç aynı.

Kaçırdığım bir şey var mı? Düzenli ifadeler kullanarak eşleşen dokümanları Google Dokümanlar'a nasıl yeniden eklerim?


2
Dokümanlar şimdi açıkça belirtiliyor: Note: Capture groups only work with Google Sheets.Bkz. Support.google.com/docs/answer/62754#regular_expressions
Kullanıcı

Yanıtlar:


4

Kısa cevap

Yerleşik bul ve değiştir işlevini kullanmak yerine Google Apps Script veya bir eklenti kullanın .

açıklama

Google Dokümanlarının Bul ve Değiştir özelliğinde, Değiştir bölümü normal ifadelerle çalışmaz replaceText()ve Google Apps Komut Dosyasındaki Doküman Hizmeti yöntemiyle çalışmaz . Neyse ki JavaScript değiştirme yöntemi çalışır.

Basit bir komut dosyası oluşturmanın temel özelliklerini öğrenmek için bkz. Https://developers.google.com/apps-script/overview

kod

Bu kod, referansta yer alan kodun bir uyarlamasıdır

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

Referanslar


3
Buna bakmayı düşüneceğim, ancak değiştirmenin regex ile çalışmadığı bir hata mı? Bu belgelere göre çalışması gerektiği gibi görünüyor: support.google.com/docs/answer/62754#regular_expressions (bölüme bakın Replace with regular expressions)
Kullanıcı

2

Biraz kibirli, ancak komut dosyasına fazladan bir ekleme gerektirmez ve muhtemelen kullanım durumlarınızın% 99'unu kapsayacaktır. Çekim gruplarında veya RegexReplaceile değiştir metinlerinde $1veya ile referans gruplarını kullanmaya devam edebilirsiniz $2. Normal ifadenizi iki yakalama grubuna ayırın ve rastgele (seyrek kullanılan) bir karakterle birleştirin ~. Ardından, döndürülen tüm değeri bundan alabilir ve ~yeni bir satırla değiştirebilirsiniz :

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

ekran görüntüsü

Google sayfalarında kullanılan normal ifade sözdizimi hakkında daha fazla bilgi için re2 spesifikasyonuna bakın


soru, anladığım kadarıyla, E-Tablolar ile değil, Google Dokümanlar ile ilgilidir.
törzsmókus

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.