Vind en Vervang
Jy kan maklik binne jou dokument navigeer met’n sleutelbord en muis, maar as jy baie bladsye het om deur te blaai, sal dit nogal’n rukkie neem om spesifieke teks in’n lang dokument te vind. Dit sal meer tydrowend wees as u sekere karakters of woorde wat u in u dokument gebruik het, wil vervang. Die" Vind en vervang " funksie stel jou in staat om’n volgorde van karakters in’n dokument te vind en dit te vervang met’n ander volgorde van karakters.
Aspose.Words laat jou toe om’n spesifieke string of gereelde uitdrukkingspatroon in jou dokument te vind en dit te vervang met’n alternatief sonder om addisionele toepassings soos Microsoft Word te installeer en te gebruik. Dit sal baie tik-en formateringstake bespoedig, wat u moontlik ure se werk bespaar.
Hierdie artikel verduidelik hoe om string vervanging en gereelde uitdrukkings met die ondersteuning van meta karakters toe te pas.
Maniere om {#ways-to-find-and-replace}Te Vind En Te Vervang
Aspose.Words bied twee maniere om die vind en vervang operasie toe te pas deur die volgende te gebruik:
- Simple string replacement - om’n spesifieke string met’n ander te vind en te vervang, moet u’n soekstring (alfanumeriese karakters) spesifiseer wat volgens alle voorkoms met’n ander gespesifiseerde vervangingstring vervang gaan word. Beide snare mag nie simbole bevat nie. Neem in ag dat stringvergelyking hooflettergevoelig kan wees, of jy kan onseker wees oor spelling of verskeie soortgelyke spellings hê.
- Regular expressions - om’n gereelde uitdrukking spesifiseer om die presiese string wedstryde te vind en vervang hulle volgens jou gereelde uitdrukking. Let daarop dat’n woord gedefinieer word as iets wat net uit alfanumeriese karakters bestaan. As’n vervanging uitgevoer word met slegs hele woorde wat ooreenstem en die invoer string gebeur simbole bevat, dan sal geen frases gevind word.
Daarbenewens kan jy spesiale meta karakters met eenvoudige string vervanging en gereelde uitdrukkings gebruik om breuke binne die vind en vervang operasie spesifiseer.
Aspose.Words bied die vind en vervang funksionaliteit met die Aspose.Words.Replacing naamruimte. Jy kan werk met baie opsies tydens die vind en vervang proses met behulp van FindReplaceOptions klas.
Soek En Vervang Teks Met Eenvoudige Stringvervanging
U kan een van die Replace metodes gebruik om’n spesifieke string te vind of te vervang en die aantal vervangings wat gemaak is, terug te gee. In hierdie geval kan jy’n string spesifiseer wat vervang moet word, ‘n string wat al sy voorkoms sal vervang, of die vervanging hooflettergevoelig is, en of slegs selfstandige woorde geraak sal word.
Die volgende kode voorbeeld toon hoe om die string “CustomerName " te vind en vervang dit met die string “James Bond”:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// Load a Word Docx document by creating an instance of the Document class. | |
auto doc = System::MakeObject<Document>(); | |
auto builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->Writeln(u"Hello _CustomerName_, "); | |
// Specify the search string and replace string using the Replace method. | |
doc->get_Range()->Replace(u"_CustomerName_", u"James Bond", System::MakeObject<FindReplaceOptions>()); | |
// Save the result. | |
System::String outputPath = outputDataDir + u"Range.ReplaceSimple.docx"; | |
doc->Save(outputPath); |
U kan die verskil tussen die dokument sien voordat u eenvoudige stringvervanging toepas:

En na die toepassing van eenvoudige string vervanging:

Soek En Vervang Teks met Gereelde Uitdrukkings
‘n gereelde uitdrukking (regex) is’n patroon wat’n sekere volgorde van teks beskryf. Veronderstel jy wil al die dubbele voorkoms van’n woord vervang met’n enkele woord voorkoms. Dan kan jy die volgende reëlmatige uitdrukking toepas om die dubbele woordpatroon te spesifiseer: ([a-zA-Z]+) \1
.
Gebruik die ander Replace metode om spesifieke karakterkombinasies te soek en te vervang deur die Regex
parameter as die gereelde uitdrukkingspatroon in te stel om ooreenkomste te vind.
Die volgende kode voorbeeld toon hoe om strings wat ooreenstem met’n gereelde uitdrukking patroon te vervang met’n gespesifiseerde vervanging string:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
auto builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->Writeln(u"sad mad bad"); | |
System::SharedPtr<FindReplaceOptions> options = System::MakeObject<FindReplaceOptions>(); | |
// Replaces all occurrences of the words "sad" or "mad" to "bad". | |
doc->get_Range()->Replace(System::MakeObject<System::Text::RegularExpressions::Regex>(u"[s|m]ad"), u"bad", options); | |
const System::String outputPath = outputDataDir + u"FindAndReplaceWithRegex_out.doc"; | |
doc->Save(outputPath); |
U kan die verskil tussen die dokument sien voordat u stringvervanging met gereelde uitdrukkings toepas:

En na die toepassing van string vervanging met gereelde uitdrukkings:

Soek En Vervang String Met Behulp Van Meta Karakters
U kan meta karakters in die soekstring of die vervangingstring gebruik as’n spesifieke teks of frase uit verskeie paragrawe, afdelings of bladsye bestaan. Sommige van die meta karakters sluit in &p vir’n paragraaf breek, &b vir’n afdeling breek, &m vir’n bladsy breek, en &l vir’n lyn breek.
Die volgende kode voorbeeld toon hoe om teks te vervang met paragraaf en bladsy breek:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->get_Font()->set_Name(u"Arial"); | |
builder->Writeln(u"First section"); | |
builder->Writeln(u" 1st paragraph"); | |
builder->Writeln(u" 2nd paragraph"); | |
builder->Writeln(u"{insert-section}"); | |
builder->Writeln(u"Second section"); | |
builder->Writeln(u" 1st paragraph"); | |
System::SharedPtr<FindReplaceOptions> options = System::MakeObject<FindReplaceOptions>(); | |
options->get_ApplyParagraphFormat()->set_Alignment(ParagraphAlignment::Center); | |
// Double each paragraph break after word "section", add kind of underline and make it centered. | |
int32_t count = doc->get_Range()->Replace(u"section&p", u"section&p----------------------&p", options); | |
// Insert section break instead of custom text tag. | |
count = doc->get_Range()->Replace(u"{insert-section}", u"&b", options); | |
System::String savePath = outputDataDir + u"FindReplaceUsingMetaCharacters.ReplaceTextContaingMetaCharacters.docx"; | |
doc->Save(savePath); |
Soek En Vervang String in Kop/Voetskrif van’n Dokument
U kan teks in die kop - /voetskrifgedeelte van’n Word-dokument vind en vervang deur die HeaderFooter - klas te gebruik.
Die volgende kode voorbeeld toon hoe om die teks van die kop afdeling in jou dokument te vervang:
Jy kan die verskil tussen die dokument sien voordat jy kopstringvervanging toepas:

En na die toepassing van kopstringvervanging:

Die kode voorbeeld om die teks van die voetskrif afdeling in jou dokument te vervang is baie soortgelyk aan die vorige kop kode voorbeeld. Al wat jy hoef te doen is om die volgende twee reëls te vervang:
auto header = headersFooters->idx_get(HeaderFooterType::HeaderPrimary);
header->get_Range()->Replace(u"Aspose.Words", u"Remove", options);
Met die volgende:
auto footer = headersFooters->idx_get(HeaderFooterType::FooterPrimary);
footer->get_Range()->Replace(u"(C) 2006 Aspose Pty Ltd.", u"Copyright (C) Aspose Pty Ltd.", options);
Jy kan die verskil tussen die dokument sien voordat jy voetskrifstringvervanging toepas:

En na die toepassing van voetskrif string vervanging:

Ignoreer Teks Tydens Soek en Vervang
Terwyl die toepassing van die vind en vervang operasie, kan jy sekere segmente van die teks ignoreer. Dus, sekere dele van die teks kan van die soektog uitgesluit word, en die vind en vervang kan slegs op die oorblywende dele toegepas word.
Aspose.Words bied baie vind en vervang eienskappe vir die ignoreer van teks soos IgnoreDeleted, IgnoreFieldCodes, IgnoreFields, IgnoreFootnotes, en IgnoreInserted.
Die volgende kode voorbeeld toon hoe om teks te ignoreer binne verwyder hersienings:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
// Insert non-revised text. | |
builder->Writeln(u"Deleted"); | |
builder->Write(u"Text"); | |
// Remove first paragraph with tracking revisions. | |
doc->StartTrackRevisions(u"John Doe", System::DateTime::get_Now()); | |
doc->get_FirstSection()->get_Body()->get_FirstParagraph()->Remove(); | |
doc->StopTrackRevisions(); | |
System::SharedPtr<FindReplaceOptions> options = System::MakeObject<FindReplaceOptions>(); | |
// Replace 'e' in document while deleted text. | |
options->set_IgnoreDeleted(true); | |
doc->get_Range()->Replace(System::MakeObject<Regex>(u"e"), u"*", options); | |
std::cout << doc->GetText().ToUtf8String() << std::endl; // The output is: Deleted\rT*xt\f | |
// Replace 'e' in document NOT ignoring deleted text. | |
options->set_IgnoreDeleted(false); | |
doc->get_Range()->Replace(System::MakeObject<Regex>(u"e"), u"*", options); | |
std::cout << doc->GetText().ToUtf8String() << std::endl; // The output is: D*l*t*d\rT*xt\f |
Pasmaak Soek En Vervang Operasie
Aspose.Words bied baie verskillende properties om teks te vind en te vervang soos die toepassing van spesifieke formaat met ApplyFont en ApplyParagraphFormats eienskappe, die gebruik van vervangings in vervangingspatrone met UseSubstitutions eienskap, en ander.
Die volgende kode voorbeeld wys hoe om’n spesifieke woord in jou dokument uit te lig:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// Highlight word "the" with yellow color. | |
auto options = System::MakeObject<FindReplaceOptions>(); | |
options->get_ApplyFont()->set_HighlightColor(System::Drawing::Color::get_Yellow()); | |
// Replace highlighted text. | |
doc->get_Range()->Replace(u"Hello", u"Hello", options); |
Aspose.Words laat jou toe om IReplacingCallback koppelvlak te gebruik om’n persoonlike metode te skep en te bel tydens’n vervang operasie. U kan’n paar gebruiksgevalle hê waar u die soek-en vervangingsbewerking moet aanpas, soos om teks wat gespesifiseer is met’n gereelde uitdrukking te vervang met HTML - etikette, so basies sal u vervang met die invoeging van HTML.
As jy’n string met’n HTML tag moet vervang, pas die IReplacingCallback koppelvlak toe om die vind en vervang operasie aan te pas sodat die wedstryd begin aan die begin van’n lopie met die wedstrydknooppunt van jou dokument. Kom ons gee verskeie voorbeelde van die gebruik van IReplacingCallback.
Die volgende kode voorbeeld toon hoe om teks gespesifiseer met HTMLvervang:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
class ReplaceWithHtmlEvaluator : public IReplacingCallback | |
{ | |
typedef ReplaceWithHtmlEvaluator ThisType; | |
typedef IReplacingCallback BaseType; | |
typedef ::System::BaseTypesInfo<BaseType> ThisTypeBaseTypesInfo; | |
RTTI_INFO(ThisType, ThisTypeBaseTypesInfo); | |
public: | |
ReplaceWithHtmlEvaluator(System::SharedPtr<FindReplaceOptions> options); | |
ReplaceAction Replacing(System::SharedPtr<ReplacingArgs> args) override; | |
private: | |
System::SharedPtr<FindReplaceOptions> mOptions; | |
}; | |
ReplaceWithHtmlEvaluator::ReplaceWithHtmlEvaluator(System::SharedPtr<FindReplaceOptions> options) | |
{ | |
mOptions = options; | |
} | |
ReplaceAction ReplaceWithHtmlEvaluator::Replacing(System::SharedPtr<ReplacingArgs> args) | |
{ | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(System::DynamicCast<Document>(args->get_MatchNode()->get_Document())); | |
builder->MoveTo(args->get_MatchNode()); | |
// Replace '<CustomerName>' text with a red bold name. | |
builder->InsertHtml(u"<b><font color='red'>James Bond, </font></b>"); | |
args->set_Replacement(u""); | |
return ReplaceAction::Replace; | |
} | |
void ReplaceWithHtml(System::String const& inputDataDir, System::String const& outputDataDir) | |
{ | |
auto doc = System::MakeObject<Document>(); | |
auto builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->Writeln(u"Hello <CustomerName>,"); | |
auto options = System::MakeObject<FindReplaceOptions>(); | |
auto optionsReplacingCallback = System::MakeObject<ReplaceWithHtmlEvaluator>(options); | |
doc->get_Range()->Replace(new Regex(u" <CustomerName>,"), System::String::Empty, options); | |
// Save the modified document. | |
doc->Save(outputDataDir + u"Range.ReplaceWithInsertHtml.doc"); | |
} |
Die volgende kode voorbeeld toon hoe om positiewe getalle met groen kleur en negatiewe getalle met rooi kleur uit te lig:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// Replace and Highlight Numbers. | |
class NumberHighlightCallback : public IReplacingCallback | |
{ | |
typedef NumberHighlightCallback ThisType; | |
typedef IReplacingCallback BaseType; | |
typedef ::System::BaseTypesInfo<BaseType> ThisTypeBaseTypesInfo; | |
RTTI_INFO(ThisType, ThisTypeBaseTypesInfo); | |
public: | |
NumberHighlightCallback(System::SharedPtr<FindReplaceOptions> const& opt) | |
: mOpt(opt) { } | |
Aspose::Words::Replacing::ReplaceAction Replacing(System::SharedPtr<Aspose::Words::Replacing::ReplacingArgs> args) override | |
{ | |
// Let replacement to be the same text. | |
args->set_Replacement(args->get_Match()->get_Value()); | |
auto val = System::Convert::ToInt32(args->get_Match()->get_Value()); | |
// Apply either red or green color depending on the number value sign. | |
mOpt->get_ApplyFont()->set_Color(val > 0 ? System::Drawing::Color::get_Green() : System::Drawing::Color::get_Red()); | |
return ReplaceAction::Replace; | |
} | |
private: | |
System::SharedPtr<FindReplaceOptions> mOpt; | |
}; |
Die volgende kode voorbeeld toon hoe om’n reël nommer te prepend om elke reël:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
class LineCounterCallback : public IReplacingCallback | |
{ | |
typedef LineCounterCallback ThisType; | |
typedef IReplacingCallback BaseType; | |
typedef ::System::BaseTypesInfo<BaseType> ThisTypeBaseTypesInfo; | |
RTTI_INFO(ThisType, ThisTypeBaseTypesInfo); | |
public: | |
Aspose::Words::Replacing::ReplaceAction Replacing(System::SharedPtr<Aspose::Words::Replacing::ReplacingArgs> args) override | |
{ | |
std::cout << args->get_Match()->get_Value().ToUtf8String() << '\n'; | |
args->set_Replacement(System::String::Format(u"{0} {1}", mCounter++, args->get_Match()->get_Value())); | |
return ReplaceAction::Replace; | |
} | |
private: | |
int32_t mCounter = 1; | |
}; | |
void LineCounter(System::String const& inputDataDir, System::String const& outputDataDir) | |
{ | |
// Create a document. | |
auto doc = System::MakeObject<Document>(); | |
auto builder = System::MakeObject<DocumentBuilder>(doc); | |
// Add lines of text. | |
builder->Writeln(u"This is first line"); | |
builder->Writeln(u"Second line"); | |
builder->Writeln(u"And last line"); | |
// Prepend each line with line number. | |
auto opt = System::MakeObject<FindReplaceOptions>(); | |
opt->set_ReplacingCallback(System::MakeObject<LineCounterCallback>()); | |
doc->get_Range()->Replace(System::MakeObject<Regex>(u"[^&p]*&p"), u"", opt); | |
doc->Save(outputDataDir + u"TestLineCounter.docx"); | |
} |