Bul ve Değiştir
Bir klavye ve fare kullanarak belgenizde kolayca gezinebilirsiniz, ancak kaydırmanız gereken çok sayfanız varsa, uzun bir belgede belirli bir metni bulmak oldukça zaman alacaktır. Belgenizde kullandığınız belirli karakterleri veya sözcükleri değiştirmek istediğinizde daha fazla zaman alacaktır. “Bul ve değiştir” işlevi, bir belgede bir karakter dizisi bulmanızı ve onu başka bir karakter dizisiyle değiştirmenizi sağlar.
Aspose.Words, belgenizde belirli bir dize veya normal ifade deseni bulmanızı ve Microsoft Word gibi ek uygulamalar yüklemeden ve kullanmadan onu bir alternatifle değiştirmenizi sağlar. Bu, birçok yazma ve biçimlendirme görevini hızlandıracak ve potansiyel olarak size çalışma saatleri kazandıracaktır.
Bu makalede, metakarakterlerin desteğiyle dize değiştirme ve normal ifadelerin nasıl uygulanacağı açıklanmaktadır.
{#ways-to-find-and-replace} Bulma ve Değiştirme Yolları
Aspose.Words aşağıdakileri kullanarak bul ve değiştir işlemini uygulamak için iki yol sağlar:
- Simple string replacement - belirli bir dizeyi başka bir dizeyle bulup değiştirmek için, belirtilen başka bir değiştirme dizesiyle tüm oluşumlara göre değiştirilecek bir arama dizesi (alfasayısal karakterler) belirtmeniz gerekir. Her iki dize de sembol içermemelidir. Dize karşılaştırmasının büyük/ küçük harfe duyarlı olabileceğini veya yazımdan emin olamayacağınızı veya birkaç benzer yazımın olduğunu göz önünde bulundurun.
- Regular expressions - tam dize eşleşmelerini bulmak için bir normal ifade belirtmek ve bunları normal ifadenize göre değiştirmek için. Bir kelimenin yalnızca alfasayısal karakterlerden oluştuğu şeklinde tanımlandığını unutmayın. Yalnızca tüm sözcükler eşleştirilerek bir değiştirme gerçekleştirilirse ve giriş dizesi semboller içeriyorsa, hiçbir sözcük öbeği bulunmaz.
Ayrıca, bul ve değiştir işlemindeki sonları belirtmek için basit dize değiştirme ve normal ifadelere sahip özel meta karakterler kullanabilirsiniz.
Aspose.Words bul ve değiştir işlevini Aspose.Words.Replacing ad alanıyla sunar. FindReplaceOptions sınıfını kullanarak bul ve değiştir işlemi sırasında birçok seçenekle çalışabilirsiniz.
Basit Dize Değiştirme {#find-and-replace-text-using-simple-string-replacement} Kullanarak Metni Bulun ve Değiştirin
Belirli bir dizeyi bulmak veya değiştirmek ve yapılan değiştirme sayısını döndürmek için Replace yöntemlerinden birini kullanabilirsiniz. Bu durumda, değiştirilecek bir dize, tüm oluşumlarının yerini alacak bir dize, değiştirmenin büyük / küçük harfe duyarlı olup olmadığını ve yalnızca tek başına sözcüklerin etkilenip etkilenmeyeceğini belirtebilirsiniz.
Aşağıdaki kod örneği, “CustomerName” dizesini nasıl bulacağınızı ve “James Bond” dizesiyle nasıl değiştireceğinizi gösterir:
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); |
Basit dize değiştirmeyi uygulamadan önce belge arasındaki farkı fark edebilirsiniz:

Ve basit dize değiştirme uyguladıktan sonra:

Normal İfadeleri Kullanarak Metni Bulun ve Değiştirin
Normal ifade (normal ifade), belirli bir metin dizisini tanımlayan bir kalıptır. Bir sözcüğün tüm çift oluşumlarını tek bir sözcük oluşumuyla değiştirmek istediğinizi varsayalım. Ardından, çift kelime desenini belirtmek için aşağıdaki normal ifadeyi uygulayabilirsiniz: ([a-zA-Z]+) \1
.
Eşleşmeleri bulmak için Regex
parametresini normal ifade deseni olarak ayarlayarak belirli karakter kombinasyonlarını aramak ve değiştirmek için diğer Replace yöntemini kullanın.
Aşağıdaki kod örneği, normal ifade deseniyle eşleşen dizelerin belirtilen bir değiştirme dizesiyle nasıl değiştirileceğini gösterir:
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); |
Normal ifadelerle dize değiştirme uygulamadan önce belge arasındaki farkı fark edebilirsiniz:

Ve normal ifadelerle dize değiştirme uyguladıktan sonra:

{#find-and-replace-text-using-metacharacters} Meta Karakterlerini Kullanarak Dizeyi Bulun ve Değiştirin
Belirli bir metin veya tümcecik birden çok paragraf, bölüm veya sayfadan oluşuyorsa, arama dizesindeki meta karakterleri veya değiştirme dizesini kullanabilirsiniz. Meta karakterlerden bazıları paragraf sonu için &p, bölüm sonu için &b, sayfa sonu için &m ve satır sonu için &l içerir.
Aşağıdaki kod örneği, metnin paragraf ve sayfa sonu ile nasıl değiştirileceğini gösterir:
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); |
Bir Belgenin Üstbilgisinde / Altbilgisinde Dizeyi Bulun ve Değiştirin
HeaderFooter sınıfını kullanarak bir Word belgesinin üstbilgi/altbilgi bölümündeki metni bulabilir ve değiştirebilirsiniz.
Aşağıdaki kod örneği, belgenizdeki üstbilgi bölümünün metninin nasıl değiştirileceğini gösterir:
Üstbilgi dizesi değiştirmeyi uygulamadan önce belge arasındaki farkı fark edebilirsiniz:

Ve başlık dizesi değiştirme uygulandıktan sonra:

Belgenizdeki altbilgi bölümünün metnini değiştirmek için kullanılan kod örneği, önceki üstbilgi kodu örneğine çok benzer. Tek yapmanız gereken aşağıdaki iki satırı değiştirmek:
auto header = headersFooters->idx_get(HeaderFooterType::HeaderPrimary);
header->get_Range()->Replace(u"Aspose.Words", u"Remove", options);
Aşağıdakilerle:
auto footer = headersFooters->idx_get(HeaderFooterType::FooterPrimary);
footer->get_Range()->Replace(u"(C) 2006 Aspose Pty Ltd.", u"Copyright (C) Aspose Pty Ltd.", options);
Altbilgi dizesi değiştirmeyi uygulamadan önce belge arasındaki farkı fark edebilirsiniz:

Ve altbilgi dizesini değiştirdikten sonra:

{#ignore-text-during-find-and-replace} Bul ve Değiştir Sırasında Metni Yoksay
Bul ve değiştir işlemini uygularken metnin belirli bölümlerini yoksayabilirsiniz. Bu nedenle, metnin belirli bölümleri aramadan çıkarılabilir ve bul ve değiştir yalnızca kalan kısımlara uygulanabilir.
Aspose.Words metni yok saymak için aşağıdaki gibi birçok bul ve değiştir özelliği sağlar IgnoreDeleted, IgnoreFieldCodes, IgnoreFields, IgnoreFootnotes, ve IgnoreInserted.
Aşağıdaki kod örneği, düzeltmeleri sil içindeki metnin nasıl yoksayılacağını gösterir:
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 |
Bul ve Değiştir İşlemini Özelleştir
Aspose.Words, metni bulmak ve değiştirmek için ApplyFont ve ApplyParagraphFormats özellikleriyle belirli bir biçim uygulamak, UseSubstitutions özelliğine sahip değiştirme kalıplarındaki ikameleri kullanmak ve diğerleri gibi birçok farklı properties sağlar.
Aşağıdaki kod örneği, belgenizdeki belirli bir sözcüğün nasıl vurgulanacağını gösterir:
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 değiştirme işlemi sırasında özel bir yöntem oluşturmak ve çağırmak için IReplacingCallback arabirimini kullanmanıza izin verir. Normal ifadeyle belirtilen metni HTML etiketleriyle değiştirmek gibi bul ve değiştir işlemini özelleştirmeniz gereken bazı kullanım durumlarınız olabilir, bu nedenle temel olarak HTML ekleyerek değiştir’i uygulayacaksınız.
Bir dizeyi HTML etiketiyle değiştirmeniz gerekirse, bul ve değiştir işlemini özelleştirmek için IReplacingCallback arabirimini uygulayın, böylece eşleşme, belgenizin eşleşme düğümüyle çalışmanın başında başlar. IReplacingCallback kullanmanın birkaç örneğini verelim.
Aşağıdaki kod örneği, HTML ile belirtilen metnin nasıl değiştirileceğini gösterir:
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"); | |
} |
Aşağıdaki kod örneği, yeşil renkli pozitif sayıların ve kırmızı renkli negatif sayıların nasıl vurgulanacağını gösterir:
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; | |
}; |
Aşağıdaki kod örneği, her satıra bir satır numarasının nasıl ekleneceğini gösterir:
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"); | |
} |