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()enDocument.Rangepara un reemplazo a nivel de documento, o en unRangemás estrecho (como el rango de una sola sección) para delimitar la operación. - Establezca
FindWholeWordsOnly = truepara evitar que un término de búsqueda coincida como subcadena de una palabra más larga. - Utilice
IgnoreFieldCodes = truecuando desee que el reemplazo opere sobre los resultados del campo mostrados, no sobre el texto subyacente de la instrucción del campo. - Prefiera
IReplacingCallbacksobre 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.Stopdesde 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
| Problema | Causa | Corrección |
|---|---|---|
| El reemplazo no aplica el nuevo formato | ApplyFont/ApplyParagraphFormat no está configurado en FindReplaceOptions | Establezca las propiedades de formato relevantes en el objeto options |
| Coincidencias encontradas inesperadamente dentro de eliminaciones de cambios rastreados | IgnoreDeleted dejado en su valor predeterminado | Establezca IgnoreDeleted = true para omitir el contenido de revisión eliminado |
| Referencias de grupos de expresiones regulares en el texto de reemplazo no se sustituyen | UseSubstitutions no está habilitado | Establezca UseSubstitutions = true para habilitar la sustitución al estilo $1 |
| El reemplazo basado en callbacks no se detiene cuando se espera | El callback devuelve Replace/Skip en lugar de Stop | Devuelva 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étodo | Descripción |
|---|---|
Range.Replace() | Búsqueda/reemplazo con expresiones regulares a lo largo de un rango, con FindReplaceOptions opcional |
FindReplaceOptions | Configura el comportamiento de coincidencia, el formato y el alcance estructural para operaciones de reemplazo |
FindReplaceDirection | Enum: Forward, Backward |
IReplacingCallback | Interfaz para lógica de reemplazo personalizada por coincidencia |
ReplacingArgs | Datos por coincidencia pasados a IReplacingCallback.Replacing() |
ReplaceAction | Enum que controla el resultado por partida: Replace, Skip, Stop |