Як використовувати текст із зйомки груп у програмі "Документи Google" замінити?


12

Я намагаюся відповідати певному тексту, а потім замінити його текстом плюс кілька зайвих символів. Мінімальний приклад тексту:

#10 Oranges. These are citrus fruits

Бажаний вихід:

#10 Oranges. These are citrus fruits

Regex: (#\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
Користувач

Відповіді:


4

Коротка відповідь

Замість вбудованої функції пошуку та заміни використовуйте сценарій Google Apps або додаток.

Пояснення

У функції "Знайти та замінити" Документи Google, частина "Замінити" не працює з регулярними виразами, і вона не працює як із replaceText()методом Служби документів у Службі сценаріїв Google Apps, на щастя, працює метод заміни JavaScript.

Щоб дізнатися основи створення простого сценарію, див. 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)
Користувач

2

Трохи хакі, але це не вимагає додаткового додавання до сценарію і, ймовірно, охопить 99% випадків використання. Ви все ще можете використовувати групи захоплення з RegexReplaceпосиланням на текст заміни на $1або $2. Просто розділіть свій регулярний вираз на дві групи захоплення і з'єднайтеся з випадковим (нечасто використовуваним) символом на кшталт ~. Тоді ви можете взяти з цього повне значення і замінити ~новим рядком:

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

скріншот

Для отримання додаткової інформації про синтаксис регулярних виразів, використовуваний у листах google, див. Специфікацію re2


наскільки я розумію, питання стосується Документів, а не Таблиць.
törzsmókus

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.