¿Cómo usar el texto de los grupos de captura en Google Docs regex replace?

11

Estoy tratando de hacer coincidir cierto texto y luego reemplazarlo con el texto más algunos caracteres adicionales. Texto de ejemplo mínimo:

#10 Oranges. These are citrus fruits

Salida deseada:

#10 Oranges. These are citrus fruits

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

Reemplazar con: $1\n

(Lo he Match using regular expressionscomprobado)

La expresión regular coincide con éxito #10 Oranges.. Sin embargo, la referencia numérica no reemplaza el texto con el grupo de captura sino que simplemente entra literalmente (la salida literal es $1\n). También he intentado usar una barra diagonal inversa para la referencia numérica \1y el resultado es el mismo.

¿Se me escapa algo? ¿Cómo vuelvo a insertar texto coincidente en documentos de Google usando expresiones regulares?

Usuario
fuente
2
Los documentos ahora dicen explícitamente: Note: Capture groups only work with Google Sheets.consulte support.google.com/docs/answer/62754#regular_expressions
Usuario

Respuestas:

3

Respuesta corta

En lugar de utilizar la función integrada de buscar y reemplazar, use Google Apps Script o un complemento.

Explicación

En la función Buscar y reemplazar de Documentos de Google, la parte Reemplazar no funciona con expresiones regulares y tampoco funciona con el método replaceText () del Servicio de documentos en Google Apps Script, afortunadamente el método de reemplazo de JavaScript funciona.

Para conocer los conceptos básicos para crear un script simple, consulte https://developers.google.com/apps-script/overview

Código

Este código es una adaptación del incluido en la referencia.

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

Referencias

Rubén
fuente
3
Consideraré investigar esto, pero ¿el hecho de que reemplazar no funciona con regex es un error? Según esta documentación, parece que debería funcionar: support.google.com/docs/answer/62754#regular_expressions (consulte la sección Replace with regular expressions)
Usuario
2

Poco hacky, pero no requiere un script adicional adicional y probablemente cubrirá el 99% de sus casos de uso. Todavía puede usar grupos de captura con RegexReplacey referencia en el texto de reemplazo con $1o $2. Simplemente divida su expresión regular en dos grupos de captura y concatene con un carácter aleatorio (de uso poco frecuente) como ~. Luego puede tomar todo el valor devuelto de eso y reemplazarlo ~con una nueva línea:

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

captura de pantalla

Para obtener más información sobre la sintaxis de expresiones regulares utilizada en las hojas de Google, consulte las especificaciones de re2

KyleMit
fuente
la pregunta es sobre documentos, no hojas, por lo que yo entiendo.
törzsmókus