Zoeken en vervangen

U kunt gemakkelijk in uw document navigeren met behulp van een toetsenbord en muis, maar als u veel pagina’s om door te scrollen, zal het een tijdje duren om specifieke tekst te vinden in een lang document. Het zal tijdrovender zijn wanneer u bepaalde tekens of woorden wilt vervangen die u in uw document hebt gebruikt. Met de functionaliteit van de zoek- en vervangfunctie kunt u een reeks tekens in een document vinden en vervangen door een andere reeks tekens.

Aspose.Words kunt u een specifieke string of reguliere expressie patroon te vinden in uw document en te vervangen door een alternatief zonder het installeren en het gebruik van extra toepassingen zoals Microsoft Word. Dit zal veel typen en formatteren taken versnellen, mogelijk bespaart u uren werk.

Dit artikel legt uit hoe tekenreeksvervanging en reguliere expressies toe te passen met behulp van metakarakters.

Manieren om te vinden en te vervangen

Aspose.Words biedt twee manieren om de vondst toe te passen en te vervangen door gebruik te maken van het volgende:

  1. Simple string replacement Beide tekenreeksen mogen geen symbolen bevatten. Houd er rekening mee dat stringvergelijking hoofdlettergevoelig kan zijn, of dat je niet zeker bent van spelling of meerdere soortgelijke spellingen hebt.
  2. Regular expressions Merk op dat een woord wordt gedefinieerd als bestaande uit alleen alfanumerieke tekens. Als vervanging wordt uitgevoerd met alleen hele woorden worden aangepast en de invoer string toevallig symbolen bevatten, dan zullen geen zinnen worden gevonden.

Daarnaast kunt u speciale metakarakters gebruiken met eenvoudige tekenreeksvervanging en reguliere expressies om breuken binnen de zoek- en vervangoperatie te specificeren.

Aspose.Words presenteert de zoek en vervangen functionaliteit door de Aspose.Words.Replacing naamruimte. U kunt werken met vele opties tijdens het vinden en vervangen proces met behulp van FindReplaceOptions Klasse.

Tekst zoeken en vervangen met behulp van eenvoudige tekenreeksvervanging

U kunt een van de Replace methoden om een bepaalde string te vinden of te vervangen en het aantal vervangingen terug te geven die werden gemaakt. In dit geval kunt u een tekenreeks opgeven die vervangen moet worden, een tekenreeks die alle gebeurtenissen vervangt, of de vervanging hoofdlettergevoelig is, en of alleen stand-alone woorden beïnvloed worden.

Het volgende voorbeeld van de code laat zien hoe je de string kunt vinden en vervangen door de string *

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// Load a Word Docx document by creating an instance of the Document class.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Writeln("Hello _CustomerName_,");
// Specify the search string and replace string using the Replace method.
doc.Range.Replace("_CustomerName_", "James Bond", new FindReplaceOptions());
// Save the result.
doc.Save(dataDir + "Range.ReplaceSimple.docx");

U kunt het verschil tussen het document opmerken voordat u eenvoudige tekenreeksvervanging toepast:

before-simple-string-replacement

En na het toepassen van eenvoudige string vervanger:

after-simple-string-replacement

Tekst zoeken en vervangen met reguliere expressies

Een reguliere expressie (regex) is een patroon dat een bepaalde volgorde van tekst beschrijft. Stel dat je alle dubbele gebeurtenissen van een woord wilt vervangen door één woord. Dan kunt u de volgende reguliere expressie toepassen om het dubbele-woord patroon op te geven: ([a-zA-Z]+) \1.

Gebruik de andere Replace methode om specifieke tekenscombinaties te zoeken en te vervangen door de Regex parameter als het reguliere expressiepatroon om overeenkomsten te vinden.

Het volgende voorbeeld van code laat zien hoe tekenreeksen die overeenkomen met een reguliere expressiepatroon te vervangen door een gespecificeerde vervangende tekenreeks:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Writeln("sad mad bad");
Assert.AreEqual("sad mad bad", doc.GetText().Trim());
// Replaces all occurrences of the words "sad" or "mad" to "bad".
doc.Range.Replace(new Regex("[s|m]ad"), "bad");
// Save the Word document.
doc.Save("Range.ReplaceWithRegex.docx");

U kunt het verschil tussen het document opmerken voordat u tekenreeksvervanging toepast met reguliere expressies:

before-replacement-with-regular-expressions

En na het toepassen van string vervanger met reguliere expressies:

after-replacement-with-regular-expressions

String zoeken en vervangen met metakarakters

U kunt metakarakters gebruiken in de zoektekst of de vervangende tekenreeks als een bepaalde tekst of zin bestaat uit meerdere paragrafen, secties of pagina’s. Enkele van de metakenmerken zijn &p voor een alineapauze, &b voor een sectiebreuk, &m voor een paginapauze, en &l voor een lijnbreuk.

Het volgende voorbeeld van code laat zien hoe tekst te vervangen door paragraaf en pagina-uitbraak:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Font.Name = "Arial";
builder.Writeln("First section");
builder.Writeln(" 1st paragraph");
builder.Writeln(" 2nd paragraph");
builder.Writeln("{insert-section}");
builder.Writeln("Second section");
builder.Writeln(" 1st paragraph");
FindReplaceOptions options = new FindReplaceOptions();
options.ApplyParagraphFormat.Alignment = ParagraphAlignment.Center;
// Double each paragraph break after word "section", add kind of underline and make it centered.
int count = doc.Range.Replace("section&p", "section&p----------------------&p", options);
// Insert section break instead of custom text tag.
count = doc.Range.Replace("{insert-section}", "&b", options);
dataDir = dataDir + "ReplaceTextContaingMetaCharacters_out.docx";
doc.Save(dataDir);

U kunt tekst vinden en vervangen in de header/voeter sectie van een Word-document met behulp van de HeaderFooter Klasse.

Het volgende voorbeeld van code laat zien hoe u de tekst van de koptekst in uw document kunt vervangen:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// Open the template document, containing obsolete copyright information in the footer.
Document doc = new Document(dataDir + "HeaderFooter.ReplaceText.doc");
// Access header of the Word document.
HeaderFooterCollection headersFooters = doc.FirstSection.HeadersFooters;
HeaderFooter header = headersFooters[HeaderFooterType.HeaderPrimary];
// Set options.
FindReplaceOptions options = new FindReplaceOptions
{
MatchCase = false,
FindWholeWordsOnly = false
};
// Replace text in the header of the Word document.
header.Range.Replace("Aspose.Words", "Remove", options);
// Save the Word document.
doc.Save(dataDir + "HeaderReplace.docx");

U kunt het verschil zien tussen het document voordat u header string vervanger:

before-applying-header-string-replacement

En na het aanbrengen van header string vervanger:

after-applying-header-string-replacement

Het codevoorbeeld om de tekst van de footer sectie in uw document te vervangen is zeer vergelijkbaar met het vorige header code voorbeeld. Je hoeft alleen de volgende twee regels te vervangen:

HeaderFooter header = headersFooters[HeaderFooterType.HeaderPrimary];
header.Range.Replace("Aspose.Words", "Remove", options);

Met de volgende kenmerken:

HeaderFooter footer = headersFooters[HeaderFooterType.FooterPrimary];
int currentYear = System.DateTime.Now.Year;
footer.Range.Replace("(C) 2006 Aspose Pty Ltd.", $"Copyright (C) {currentYear} by Aspose Pty Ltd.", options);

U kunt het verschil tussen het document merken voordat u de tekst van de voettekst vervangt:

before-applying-footer-string-replacement

En na het toepassen van footer string vervanging:

after-applying-footer-string-replacement

Tekst negeren tijdens zoeken en vervangen

Tijdens het toepassen van de zoek- en vervangoperatie, kunt u bepaalde segmenten van de tekst negeren. Dus, bepaalde delen van de tekst kunnen worden uitgesloten van de zoekopdracht, en de vondst en vervanging kan alleen worden toegepast op de resterende delen.

Aspose.Words biedt veel zoek-en vervangen eigenschappen voor het negeren van tekst zoals IgnoreDeleted, IgnoreFieldCodes, IgnoreFields, IgnoreFootnotes, en IgnoreInserted.

Het volgende voorbeeld van code laat zien hoe je tekst in de delete revisies moet negeren:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Insert non-revised text.
builder.Writeln("Deleted");
builder.Write("Text");
// Remove first paragraph with tracking revisions.
doc.StartTrackRevisions("John Doe", DateTime.Now);
doc.FirstSection.Body.FirstParagraph.Remove();
doc.StopTrackRevisions();
Regex regex = new Regex("e");
FindReplaceOptions options = new FindReplaceOptions();
// Replace 'e' in document while ignoring deleted text.
options.IgnoreDeleted = true;
doc.Range.Replace(regex, "*", options);
Assert.AreEqual(doc.GetText().Trim(), "Deleted\rT*xt");
// Replace 'e' in document while not ignoring deleted text.
options.IgnoreDeleted = false;
doc.Range.Replace(regex, "*", options);

Operatie zoeken en vervangen aanpassen

Aspose.Words biedt veel verschillende properties tekst te vinden en te vervangen, zoals het toepassen van een specifiek formaat door ApplyFont en ApplyParagraphFormats eigenschappen, gebruik van substituties in vervangende patronen met UseSubstitutions eigendom, en anderen.

Het volgende voorbeeld van code laat zien hoe u een specifiek woord in uw document kunt markeren:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// Highlight word "the" with yellow color.
FindReplaceOptions options = new FindReplaceOptions();
options.ApplyFont.HighlightColor = Color.Yellow;
// Replace highlighted text.
doc.Range.Replace("Hello", "Hello", options);

Aspose.Words kunt u gebruiken IReplacingCallback interface om een aangepaste methode te maken en aan te roepen tijdens een vervangende bewerking. U kunt enkele use cases hebben waar u de zoekopdracht moet aanpassen en de bewerking moet vervangen, zoals het vervangen van tekst door een reguliere expressie door HTML-tags, dus in principe zult u vervangen door het invoegen van HTML.

Als je een tekenreeks moet vervangen door een HTML-tag, moet je de IReplacingCallback interface om de zoek- en vervangoperatie aan te passen zodat de wedstrijd begint aan het begin van een run met de matchknop van uw document. Laten we verschillende voorbeelden geven van het gebruik IReplacingCallback.

Het volgende voorbeeld van code laat zien hoe u de tekst die is opgegeven met HTML kunt vervangen:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
public static void ReplaceWithHtml(string dataDir)
{
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Writeln("Hello <CustomerName>,");
FindReplaceOptions options = new FindReplaceOptions();
options.ReplacingCallback = new ReplaceWithHtmlEvaluator(options);
doc.Range.Replace(new Regex(@" <CustomerName>,"), String.Empty, options);
// Save the modified document.
doc.Save(dataDir + "Range.ReplaceWithInsertHtml.doc");
}
private class ReplaceWithHtmlEvaluator : IReplacingCallback
{
internal ReplaceWithHtmlEvaluator(FindReplaceOptions options)
{
mOptions = options;
}
//This simplistic method will only work well when the match starts at the beginning of a run.
ReplaceAction IReplacingCallback.Replacing(ReplacingArgs args)
{
DocumentBuilder builder = new DocumentBuilder((Document)args.MatchNode.Document);
builder.MoveTo(args.MatchNode);
// Replace '<CustomerName>' text with a red bold name.
builder.InsertHtml("<b><font color='red'>James Bond, </font></b>"); args.Replacement = "";
return ReplaceAction.Replace;
}
private readonly FindReplaceOptions mOptions;
}

Het volgende voorbeeld van code laat zien hoe positieve getallen met groene kleur en negatieve getallen met rode kleur te markeren:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// Replace and Highlight Numbers.
internal class NumberHighlightCallback : IReplacingCallback
{
public NumberHighlightCallback(FindReplaceOptions opt)
{
mOpt = opt;
}
public ReplaceAction Replacing(ReplacingArgs args)
{
// Let replacement to be the same text.
args.Replacement = args.Match.Value;
int val = int.Parse(args.Match.Value);
// Apply either red or green color depending on the number value sign.
mOpt.ApplyFont.Color = (val > 0)
? Color.Green
: Color.Red;
return ReplaceAction.Replace;
}
private readonly FindReplaceOptions mOpt;
}

Het volgende voorbeeld van code laat zien hoe je een regelnummer aan elke regel voorschrijft:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
public void LineCounter()
{
// Create a document.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Add lines of text.
builder.Writeln("This is first line");
builder.Writeln("Second line");
builder.Writeln("And last line");
// Prepend each line with line number.
FindReplaceOptions opt = new FindReplaceOptions() { ReplacingCallback = new LineCounterCallback() };
doc.Range.Replace(new Regex("[^&p]*&p"), "", opt);
doc.Save(@"X:\TestLineCounter.docx");
}
internal class LineCounterCallback : IReplacingCallback
{
public ReplaceAction Replacing(ReplacingArgs args)
{
Debug.WriteLine(args.Match.Value);
args.Replacement = string.Format("{0} {1}", mCounter++, args.Match.Value);
return ReplaceAction.Replace;
}
private int mCounter = 1;
}