ReplacingArgs Class

Provides data for a custom replace operation.

ExpandedInheritance Hierarchy


Namespace:  Aspose.Words.Replacing
Assembly:  Aspose.Words (in Aspose.Words.dll) Version: 20.10.0


public class ReplacingArgs

The ReplacingArgs type exposes the following members.


Public propertyCode exampleGroupIndex
Identifies, by index, a captured group in the Match that is to be replaced with the Replacement string.
Public propertyCode exampleGroupName
Identifies, by name, a captured group in the Match that is to be replaced with the Replacement string.
Public propertyCode exampleMatch
The Match resulting from a single regular expression match during a Replace.
Public propertyCode exampleMatchNode
Gets the node that contains the beginning of the match.
Public propertyCode exampleMatchOffset
Gets the zero-based starting position of the match from the start of the node that contains the beginning of the match.
Public propertyCode exampleReplacement
Gets or sets the replacement string.


Public methodEquals (Inherited from Object.)
Public methodGetHashCode (Inherited from Object.)
Public methodGetType (Inherited from Object.)
Public methodToString (Inherited from Object.)


Replaces text specified with regular expression with HTML.
public void ReplaceWithInsertHtml()
    // Open the document
    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);

    builder.Writeln("Hello <CustomerName>,");

    FindReplaceOptions options = new FindReplaceOptions();
    options.ReplacingCallback = new ReplaceWithHtmlEvaluator();

    doc.Range.Replace(new Regex(@" <CustomerName>,"), string.Empty, options);

    // Save the modified document
    doc.Save(ArtifactsDir + "Range.ReplaceWithInsertHtml.docx");
    Assert.AreEqual("James Bond, Hello\r\x000c",

private class ReplaceWithHtmlEvaluator : IReplacingCallback
    ReplaceAction IReplacingCallback.Replacing(ReplacingArgs args)
        DocumentBuilder builder = new DocumentBuilder((Document)args.MatchNode.Document);

        // Replace '<CustomerName>' text with a red bold name
        builder.InsertHtml("<b><font color='red'>James Bond, </font></b>");
        args.Replacement = "";

        return ReplaceAction.Replace;
Shows how to insert content of one document into another during a customized find and replace operation.
public void InsertDocumentAtReplace()
    Document mainDoc = new Document(MyDir + "Document insertion destination.docx");

    FindReplaceOptions options = new FindReplaceOptions();
    options.Direction = FindReplaceDirection.Backward;
    options.ReplacingCallback = new InsertDocumentAtReplaceHandler();

    mainDoc.Range.Replace(new Regex("\\[MY_DOCUMENT\\]"), "", options);
    mainDoc.Save(ArtifactsDir + "InsertDocument.InsertDocumentAtReplace.docx");


private class InsertDocumentAtReplaceHandler : IReplacingCallback
    ReplaceAction IReplacingCallback.Replacing(ReplacingArgs args)
        Document subDoc = new Document(MyDir + "Document.docx");

        // Insert a document after the paragraph, containing the match text
        Paragraph para = (Paragraph)args.MatchNode.ParentNode;
        InsertDocument(para, subDoc);

        // Remove the paragraph with the match text

        return ReplaceAction.Skip;

/// <summary>
/// Inserts content of the external document after the specified node.
/// </summary>
static void InsertDocument(Node insertionDestination, Document docToInsert)
    // Make sure that the node is either a paragraph or table
    if (insertionDestination.NodeType.Equals(NodeType.Paragraph) || insertionDestination.NodeType.Equals(NodeType.Table))
        // We will be inserting into the parent of the destination paragraph
        CompositeNode dstStory = insertionDestination.ParentNode;

        // This object will be translating styles and lists during the import
        NodeImporter importer =
            new NodeImporter(docToInsert, insertionDestination.Document, ImportFormatMode.KeepSourceFormatting);

        // Loop through all block level nodes in the body of the section
        foreach (Section srcSection in docToInsert.Sections.OfType<Section>())
            foreach (Node srcNode in srcSection.Body)
                // Skip the node if it is a last empty paragraph in a section
                if (srcNode.NodeType.Equals(NodeType.Paragraph))
                    Paragraph para = (Paragraph)srcNode;
                    if (para.IsEndOfSection && !para.HasChildNodes)

                // This creates a clone of the node, suitable for insertion into the destination document
                Node newNode = importer.ImportNode(srcNode, true);

                // Insert new node after the reference node
                dstStory.InsertAfter(newNode, insertionDestination);
                insertionDestination = newNode;
        throw new ArgumentException("The destination node should be either a paragraph or table.");

ExpandedSee Also