Buscar y Reemplazar

Buscar y reemplazar

Aspose.Words FOSS para .NET ofrece búsqueda y reemplazo basados en expresiones regulares a través de Range.Replace(), configurable mediante FindReplaceOptions y, para escenarios avanzados, una implementación personalizada de IReplacingCallback del espacio de nombres Aspose.Words.Replacing.


Búsqueda y reemplazo básicos

Range.Replace(pattern, replacement) ejecuta una búsqueda y reemplazo con expresiones regulares a lo largo del rango — todo el documento, cuando se invoca sobre Document.Range. La sobrecarga Replace(pattern, replacement, options) acepta un objeto FindReplaceOptions para un control más fino: MatchCase y FindWholeWordsOnly ajustan el comportamiento de coincidencia, Direction (un valor FindReplaceDirection, Forward o Backward) controla la dirección de la búsqueda, y ApplyFont / ApplyParagraphFormat permiten que un reemplazo lleve formato nuevo en lugar de solo texto nuevo.


Opciones conscientes del formato y estructurales

FindReplaceOptions incluye varias banderas que determinan qué construcciones del documento puede cruzar o ignorar una coincidencia: IgnoreDeleted y IgnoreInserted controlan si el contenido de cambios controlados participa en la coincidencia, IgnoreFields y IgnoreFieldCodes controlan si se buscan el texto de resultado de campo y los códigos de campo, IgnoreFootnotes excluye el contenido de notas al pie/nota final, y IgnoreStructuredDocumentTags y IgnoreShapes excluyen respectivamente los controles de contenido y el texto de formas. UseSubstitutions habilita la sintaxis de sustitución con expresiones regulares (como $1) en la cadena de reemplazo. LegacyMode y UseLegacyOrder conservan el comportamiento de coincidencia anterior para compatibilidad con documentos procesados por lógica anterior.


Lógica de reemplazo personalizada con IReplacingCallback

Para la lógica de reemplazo que no puede expresarse como una cadena de reemplazo fija, implemente IReplacingCallback y su único método Replacing(args), luego asigne la implementación a FindReplaceOptions.ReplacingCallback (o pásela directamente al constructor FindReplaceOptions(replacingCallback)). La función de devolución de llamada recibe un objeto ReplacingArgs para cada coincidencia, exponiendo Match (la coincidencia subyacente de expresión regular), MatchNode / MatchEndNode (los nodos del documento que contienen la coincidencia), MatchOffset, y una cadena Replacement que se puede establecer. Devolver un valor ReplaceAction desde la devolución de llamada — Replace, Skip o Stop — controla si esa coincidencia particular se reemplaza, se deja tal cual, o se detiene toda la operación de buscar/reemplazar.


Consejos y mejores prácticas

  • Llame a Replace() en Document.Range para un reemplazo a nivel de documento, o en un Range más estrecho (como el rango de una sola sección) para delimitar la operación.
  • Establezca FindWholeWordsOnly = true para evitar que un término de búsqueda coincida como subcadena de una palabra más larga.
  • Utilice IgnoreFieldCodes = true cuando desee que el reemplazo opere sobre los resultados del campo mostrados, no sobre el texto subyacente de la instrucción del campo.
  • Prefiera IReplacingCallback sobre el post-procesamiento cuando el texto de reemplazo depende del contexto de la coincidencia (nodo circundante, formato o posición) en lugar de ser una cadena fija.
  • Devuelva ReplaceAction.Stop desde una devolución de llamada para terminar una operación de buscar/reemplazar temprano una vez que se cumpla una condición, en lugar de procesar todas las coincidencias restantes.

Problemas comunes

ProblemaCausaCorrección
El reemplazo no aplica el nuevo formatoApplyFont/ApplyParagraphFormat no está configurado en FindReplaceOptionsEstablezca las propiedades de formato relevantes en el objeto options
Coincidencias encontradas inesperadamente dentro de eliminaciones de cambios rastreadosIgnoreDeleted dejado en su valor predeterminadoEstablezca IgnoreDeleted = true para omitir el contenido de revisión eliminado
Referencias de grupos de expresiones regulares en el texto de reemplazo no se sustituyenUseSubstitutions no está habilitadoEstablezca UseSubstitutions = true para habilitar la sustitución al estilo $1
El reemplazo basado en callbacks no se detiene cuando se esperaEl callback devuelve Replace/Skip en lugar de StopDevuelva ReplaceAction.Stop de Replacing() cuando la operación deba finalizar

FAQ

¿Range.Replace() admite expresiones regulares?

Sí — el argumento pattern es una expresión regular, comparada con el texto del rango.

¿Cómo reemplazo texto solo dentro de una sección específica, no en todo el documento?

Llame a Replace() en el Range de esa sección en lugar de Document.Range.

¿Cómo hago que el texto de reemplazo dependa de lo que se haya coincidido?

Implemente IReplacingCallback, lea los detalles de la coincidencia de ReplacingArgs, establezca ReplacingArgs.Replacement al texto calculado y devuelva ReplaceAction.Replace.

¿Puede la búsqueda/reemplazo buscar hacia atrás en el documento?

Sí — establece FindReplaceOptions.Direction a FindReplaceDirection.Backward.


Resumen de API Reference

Clase / MétodoDescripción
Range.Replace()Búsqueda/reemplazo con expresiones regulares a lo largo de un rango, con FindReplaceOptions opcional
FindReplaceOptionsConfigura el comportamiento de coincidencia, el formato y el alcance estructural para operaciones de reemplazo
FindReplaceDirectionEnum: Forward, Backward
IReplacingCallbackInterfaz para lógica de reemplazo personalizada por coincidencia
ReplacingArgsDatos por coincidencia pasados a IReplacingCallback.Replacing()
ReplaceActionEnum que controla el resultado por partida: Replace, Skip, Stop

Ver también

 Español