Bul ve Değiştir
Klavye ve fareyi kullanarak belgenizde kolayca gezinebilirsiniz, ancak kaydırılacak çok sayıda sayfanız varsa, uzun bir belgede belirli bir metni bulmak oldukça zaman alacaktır. Belgenizde kullandığınız belirli karakterleri veya kelimeleri değiştirmek istediğinizde daha fazla zaman harcayacaksınız. “Bul ve değiştir” işlevi, bir belgedeki bir karakter dizisini bulmanızı ve bunu başka bir karakter dizisiyle değiştirmenizi sağlar.
Aspose.Words, belgenizde belirli bir dize veya düzenli ifade kalıbı 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 saatlerce çalışmanızdan tasarruf etmenizi sağlayacaktır.
Bu makalede, meta karakterlerin desteğiyle dize değişiminin ve normal ifadelerin nasıl uygulanacağı açıklanmaktadır.
{#ways-to-find-and-replace}‘i Bulmanın ve Değiştirmenin Yolları
Aspose.Words, aşağıdakileri kullanarak bul ve değiştir işlemini uygulamak için iki yol sağlar:
- Basit dize değiştirme – belirli bir dizeyi bulmak ve başka bir dizeyle değiştirmek için, tüm oluşumlara göre başka bir belirtilen değiştirme dizesiyle 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 olamayabileceğinizi ya da birkaç benzer yazımınız olabileceğini göz önünde bulundurun.
- Normal ifadeler – tam dize eşleşmelerini bulmak ve bunları normal ifadenize göre değiştirmek amacıyla bir normal ifade belirtmek için. Bir kelimenin yalnızca alfasayısal karakterlerden oluştuğu şeklinde tanımlandığını unutmayın. Değiştirme yalnızca tam sözcükler eşleştirilerek yürütülürse ve giriş dizesi simgeler içeriyorsa, hiçbir sözcük öbeği bulunamaz.
Ayrıca, bulma ve değiştirme işlemindeki kesintileri belirtmek için basit dize değiştirme ve normal ifadelere sahip özel meta karakterler kullanabilirsiniz.
Aspose.Words, bulma ve değiştirme işlevini Aspose.Words.Replacing ad alanıyla sunar. FindReplaceOptions sınıfını kullanarak bulma ve değiştirme işlemi sırasında birçok seçenekle çalışabilirsiniz.
Basit Dize Değiştirme {#find-and-replace-text-using-simple-string-replacement}‘i Kullanarak Metni Bulma ve Değiştirme
Belirli bir dizeyi bulmak veya değiştirmek ve yapılan değişiklik sayısını döndürmek için Replace yöntemlerinden birini kullanabilirsiniz. Bu durumda, değiştirilecek bir dizeyi, tüm oluşumlarının yerini alacak bir dizeyi, değiştirmenin büyük/küçük harfe duyarlı olup olmayacağını ve yalnızca bağımsız sözcüklerin etkilenip etkilenmeyeceğini belirtebilirsiniz.
Aşağıdaki kod örneği, “CustomerName” dizesinin nasıl bulunacağını ve onu “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-.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"); |
Basit dize değişimini uygulamadan önce belge arasındaki farkı fark edebilirsiniz:

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

Normal İfadeler {#find-and-replace-text-using-regular-expressions} Kullanarak Metni Bulma ve Değiştirme
Düzenli ifade (regex), belirli bir metin dizisini tanımlayan bir kalıptır. Bir kelimenin tüm çift geçişlerini tek bir sözcük geçişiyle değiştirmek istediğinizi varsayalım. Daha sonra çift sözcük modelini belirtmek için şu normal ifadeyi uygulayabilirsiniz: ([a-zA-Z]+) \1
.
Eşleşmeleri bulmak için Regex
parametresini normal ifade modeli olarak ayarlayarak belirli karakter birleşimlerini aramak ve değiştirmek için diğer Replace yöntemini kullanın.
Aşağıdaki kod örneği, normal ifade düzeniyle eşleşen dizelerin belirtilen 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-.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"); |
Düzenli ifadelerle dize değişimini uygulamadan önce belge arasındaki farkı fark edebilirsiniz:

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

Meta Karakterler {#find-and-replace-text-using-metacharacters}‘i Kullanarak Dizeyi Bulma ve Değiştirme
Belirli bir metin veya tümcecik birden fazla paragraf, bölüm veya sayfadan oluşuyorsa, arama dizesinde veya değiştirme dizesinde meta karakterler kullanabilirsiniz. Meta karakterlerden bazıları paragraf sonu için &P‘i, bölüm sonu için &B‘yi, sayfa sonu için &M‘i ve satır sonu için & ben‘i içerir.
Aşağıdaki kod örneği, metnin paragraf ve sayfa sonuyla 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-.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); |
Bir Belge {#find-and-replace-string-in-header-or-footer-of-a-document}‘in Üstbilgi/Altbilgisindeki Dizeyi Bulma ve Değiştirme
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 başlık bölümünün metninin nasıl değiştirileceğini gösterir:
Başlık dizesini değiştirmeden önce belge arasındaki farkı fark edebilirsiniz:

Ve başlık dizesi değişimini uyguladıktan sonra:

Belgenizdeki alt bilgi bölümünün metnini değiştirmeye yönelik kod örneği, önceki başlık kodu örneğine çok benzer. Tek yapmanız gereken aşağıdaki iki satırı değiştirmek:
HeaderFooter header = headersFooters[HeaderFooterType.HeaderPrimary];
header.Range.Replace("Aspose.Words", "Remove", options);
Takip ederek:
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);
Altbilgi dizesini değiştirmeden önce belge arasındaki farkı fark edebilirsiniz:

Altbilgi dizesinin değiştirilmesini uyguladıktan 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 göz ardı edebilirsiniz. Böylece metnin belirli bölümleri aramanın dışında tutulabilir ve bul ve değiştir işlemi yalnızca geri kalan bölümlere uygulanabilir.
Aspose.Words, metni yok saymak için IgnoreDeleted, IgnoreFieldCodes, IgnoreFields, IgnoreFootnotes ve IgnoreInserted gibi birçok bul ve değiştir özelliği sağlar.
Aşağıdaki kod örneği, silme düzeltmelerinin 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-.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); |
{#customize-find-and-replace-operation} Bul ve Değiştir İşlemini Özelleştirme
Aspose.Words, metni bulmak ve değiştirmek için ApplyFont ve ApplyParagraphFormats özellikleriyle belirli formatı uygulamak, UseSubstitutions özelliğiyle değiştirme modellerinde 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-.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, değiştirme işlemi sırasında özel bir yöntem oluşturmak ve çağırmak için IReplacingCallback arayüzünü kullanmanıza olanak tanır. Normal ifadeyle belirtilen metni HTML etiketleriyle değiştirmek gibi bulma ve değiştirme işlemini özelleştirmeniz gereken bazı kullanım durumlarınız olabilir, bu nedenle temel olarak değiştirmeyi HTML ekleyerek uygulayacaksınız.
Bir dizeyi bir HTML etiketiyle değiştirmeniz gerekiyorsa, bulma ve değiştirme işlemini özelleştirmek için IReplacingCallback arayüzünü uygulayın; böylece eşleşme, belgenizin eşleşme düğümüyle bir çalıştırmanın başlangıcında başlar. IReplacingCallback kullanımına ilişkin birkaç örnek 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-.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; | |
} |
Aşağıdaki kod örneği, pozitif sayıların yeşil renkle ve negatif sayıların kırmızı renkle nasıl vurgulanacağını gösterir:
// 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; | |
} |
Aşağıdaki kod örneği, her satırın başına 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-.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; | |
} |