Търсене и замяна
Можете лесно да навигирате във вашия документ с помощта на клавиатура и мишка, но ако имате много страници, през които да преминете, ще отнеме доста време, за да намерите конкретен текст в дълъг документ. Ще отнеме повече време, когато искате да замените определени символи или думи, които сте използвали в документа си. Функционалността на почерка ви позволява да намерите поредица от символи в документ и да го замените с друга поредица от символи.
Aspose.Words позволява да намерите конкретен низ или регулярен израз в документа си и да го замените с алтернатива, без да инсталирате и използвате допълнителни приложения като Microsoft Word. Това ще ускори много писане и форматиране задачи, потенциално спестявайки ви часове работа.
Тази статия обяснява как да се прилагат низ замяна и редовни изрази с подкрепата на мета символи.
Начини за намиране и замяна
Aspose.Words осигурява два начина за прилагане на операцията за намиране и замяна, като използва следното:
- Просто замяна на низ за да намерите и замените конкретен низ с друг, трябва да посочите низ за търсене (алфачислителни символи), който ще бъде заменен според всички събития с друг определен заместващ низ. И двата низа не трябва да съдържат символи. Като се има предвид, че сравнението на низовете може да бъде чувствено за случая, или може да не сте сигурни в правописа или да имате няколко подобни правописа.
- Регулярни изрази год. за да определите регулярен израз, за да намерите точния низ съвпадения и да ги замените според редовния си израз. Имайте предвид, че дадена дума се определя като съставена само от буквено-цифрови знаци. Ако заместващ се изпълнява само с цели думи, които се сравняват и входният низ съдържа символи, тогава няма да бъдат намерени фрази.
Също така, можете да използвате специални мета символи с прости низ замяна и редовни изрази, за да уточните прекъсвания в рамките на намирането и замяна на операция.
Aspose.Words представя функционалността на намиране и замяна с IReplacingCallBack. Можете да работите с много опции по време на намирането и замяната на процеса, като използвате FindReplaceOptions Клас.
Търсене и замяна на текст с помощта на проста замяна на низове
Можете да използвате един от Replace методи за намиране или замяна на определен низ и връщане на броя на направени заместители. В този случай можете да посочите низ, който да бъде заменен, низ, който ще замени всички негови събития, дали замяната е чувствителна към случай и дали ще бъдат засегнати само самостоятелни думи.
Следният пример за код показва как да намерите стринга гол.CriverName ..и да го замените със стринга * .James Bond .*:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// 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.getRange().replace("_CustomerName_", "James Bond", new FindReplaceOptions()); | |
// Save the result. | |
doc.save(dataDir + "Range.ReplaceSimple.docx"); |
Можете да забележите разликата между документа, преди да приложите проста замяна на низове:

И след прилагане на прост низ замяна:

Търсене и замяна на текст, използвайки редовни изрази
Редовен израз (regex) е модел, който описва определена последователност от текст. Предполагам, че искате да замените всички двойни събития на една дума с една дума явление. След това можете да приложите следния регулярен израз, за да посочите модела с две думи: ([a-zA-Z]+) \1
.
Използвай другото. Replace метод за търсене и замяна на специфични комбинации от символи чрез задаване на Regex
параметър като регулярен израз модел за намиране на съвпадения.
Следният пример с код показва как да замените низовете, които съвпадат с регулярен израз с определен низ за замяна:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.writeln("sad mad bad"); | |
if(doc.getText().trim() == "sad mad bad") | |
{ | |
System.out.println("Strings are equal!"); | |
} | |
// Replaces all occurrences of the words "sad" or "mad" to "bad". | |
FindReplaceOptions options = new FindReplaceOptions(); | |
doc.getRange().replace(Pattern.compile("[s|m]ad"), "bad", options); | |
// Save the Word document. | |
doc.save(dataDir + "Range.ReplaceWithRegex.docx"); |
Можете да забележите разликата между документа, преди да приложите замяна на низ с редовни изрази:

И след прилагане на низ замяна с редовни изрази:

Намиране и замяна Струн Използване на мета символи
Можете да използвате мета символи в низа за търсене или заместващия низ, ако даден текст или фраза се състои от множество параграфи, раздели или страници. Някои от мета символите включват &p за прекъсване на параграфа, &b за прекъсване на раздел, &m за прекъсване на страницата, и &l за прекъсване на линията.
Следният пример за код показва как да замените текста с параграф и да прекъснете страницата:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.getFont().setName("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.getApplyParagraphFormat().setAlignment(ParagraphAlignment.CENTER); | |
// Double each paragraph break after word "section", add kind of underline and make it centered. | |
int count = doc.getRange().replace("section&p", "section&p----------------------&p", options); | |
// Insert section break instead of custom text tag. | |
count = doc.getRange().replace("{insert-section}", "&b", options); | |
doc.save(dataDir + "ReplaceTextContaingMetaCharacters_out.docx"); |
Намерете и заменете низ в заглавна част/футър на документ
Можете да намерите и замените текст в раздела заглавна / крак на Word документ с помощта на HeaderFooter Клас.
Следният пример за код показва как да замените текста на заглавието във вашия документ:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// 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.getFirstSection().getHeadersFooters(); | |
HeaderFooter header = headersFooters.get(HeaderFooterType.HEADER_PRIMARY); | |
// Set options. | |
FindReplaceOptions options = new FindReplaceOptions(); | |
options.setMatchCase(false); | |
options.setFindWholeWordsOnly(false); | |
// Replace text in the header of the Word document. | |
header.getRange().replace("Aspose.Words", "Remove", options); | |
// Save the Word document. | |
doc.save(dataDir + "HeaderReplace.docx"); |
Можете да забележите разликата между документа, преди да приложите замяна на низ:

И след прилагане на заглавна низ замяна:

Примерът с кода за замяна на текста на секцията с подножието във вашия документ е много подобен на предишния заглавен код. Всичко, което трябва да направите, е да замените следните два реда:
HeaderFooter header = headersFooters.get(HeaderFooterType.HEADER_PRIMARY);
header.getRange().replace("Aspose.Words", "Remove", options);
Със следното:
Можете да забележите разликата между документа, преди да приложите замяна на низ:

И след прилагане на подметката на низа:

Игнориране на текст по време на намиране и замяна
Докато прилагате намерете и замените операцията, можете да игнорирате някои сегменти от текста. Така че някои части от текста могат да бъдат изключени от търсенето, а намирането и замяната могат да се прилагат само към останалите части.
Aspose.Words осигурява много намери и замени свойства за игнориране на текст като IgnoreDeleted, IgnoreFieldCodes, IgnoreFields, IgnoreFootnotes, както и IgnoreInserted.
Следният пример за код показва как да игнорирате текст вътре изтрийте ревизиите:
// Create new document. | |
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("author", new Date()); | |
doc.getFirstSection().getBody().getFirstParagraph().remove(); | |
doc.stopTrackRevisions(); | |
Pattern regex = Pattern.compile("e", Pattern.CASE_INSENSITIVE); | |
FindReplaceOptions options = new FindReplaceOptions(); | |
// Replace 'e' in document ignoring deleted text. | |
options.setIgnoreDeleted(true); | |
doc.getRange().replace(regex, "*", options); | |
System.out.println(doc.getText()); // The output is: Deleted\rT*xt\f | |
// Replace 'e' in document NOT ignoring deleted text. | |
options.setIgnoreDeleted(false); | |
doc.getRange().replace(regex, "*", options); | |
System.out.println(doc.getText()); // The output is: D*l*t*d\rT*xt\f |
Персонализиране Търсене и замяна на операция
Aspose.Words осигурява много различни properties да намери и замени текст, като например прилагане на специфичен формат с ApplyFont както и ApplyParagraphFormats свойства, като се използват заместители в резервни модели с UseSubstitutions собственост и други.
Следният пример за код показва как да се подчертае конкретна дума във вашия документ:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// Highlight word "the" with yellow color. | |
FindReplaceOptions options = new FindReplaceOptions(); | |
options.getApplyFont().setHighlightColor(Color.YELLOW); | |
// Replace highlighted text. | |
doc.getRange().replace("the", "the", options); |
Aspose.Words Ви позволява да използвате IReplacingCallback интерфейс за създаване и повикване на потребителски метод по време на замяна на операция. Можете да имате някои случаи на използване, когато трябва да персонализирате операцията за намиране и замяна, като например замяна на текст, посочен с редовен израз с HTML тагове, така че основно ще приложите замяна с вмъкване HTML.
Ако трябва да замените низ с HTML таг, нанесете IReplacingCallback интерфейс за персонализиране на намирането и подмяната на операцията, така че мачът започва в началото на тичане с възела на мача на вашия документ. Нека дадем няколко примера за използване IReplacingCallback.
Следният пример за код показва как да замените текста с HTML:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
public static void ReplaceWithHtml() throws Exception { | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.writeln("Hello <CustomerName>,"); | |
FindReplaceOptions options = new FindReplaceOptions(); | |
options.setReplacingCallback(new ReplaceWithHtmlEvaluator()); | |
doc.getRange().replace(Pattern.compile(" <CustomerName>,"), "", options); | |
//doc.getRange().replace(" <CustomerName>,", html, options); | |
// Save the modified document. | |
doc.save(dataDir + "Range.ReplaceWithInsertHtml.doc"); | |
System.out.println("\nText replaced with meta characters successfully.\nFile saved at " + dataDir); | |
} | |
static class ReplaceWithHtmlEvaluator implements IReplacingCallback { | |
public int replacing(ReplacingArgs e) throws Exception { | |
// This is a Run node that contains either the beginning or the complete match. | |
Node currentNode = e.getMatchNode(); | |
// create Document Buidler and insert MergeField | |
DocumentBuilder builder = new DocumentBuilder((Document) e.getMatchNode().getDocument()); | |
builder.moveTo(currentNode); | |
// Replace '<CustomerName>' text with a red bold name. | |
builder.insertHtml("<b><font color='red'>James Bond, </font></b>");e.getReplacement(); | |
currentNode.remove(); | |
//Signal to the replace engine to do nothing because we have already done all what we wanted. | |
return ReplaceAction.SKIP; | |
} | |
} |
Следният пример за код показва как да подчертаем положителни числа със зелен цвят и отрицателни числа с червен цвят:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
// Replace and Highlight Numbers. | |
static class NumberHighlightCallback implements IReplacingCallback { | |
public int replacing (ReplacingArgs args) throws Exception { | |
Node currentNode = args.getMatchNode(); | |
// Let replacement to be the same text. | |
args.setReplacement(currentNode.getText()); | |
int val = currentNode.hashCode(); | |
// Apply either red or green color depending on the number value sign. | |
FindReplaceOptions options = new FindReplaceOptions(); | |
if(val > 0) | |
{ | |
options.getApplyFont().setColor(Color.GREEN); | |
} | |
else | |
{ | |
options.getApplyFont().setColor(Color.RED); | |
} | |
return ReplaceAction.REPLACE; | |
} | |
} |
Следният пример за код показва как да се прекара номер на линия на всеки ред:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
public static void TestLineCounter() throws Exception { | |
// 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(); | |
opt.setReplacingCallback(new LineCounterCallback()); | |
doc.getRange().replace(Pattern.compile("[^&p]*&p"), "", opt); | |
doc.save(dataDir + "TestLineCounter.docx"); | |
} | |
static class LineCounterCallback implements IReplacingCallback | |
{ | |
private int mCounter = 1; | |
public int replacing(ReplacingArgs args) throws Exception { | |
Node currentNode = args.getMatchNode(); | |
System.out.println(currentNode.getText()); | |
args.setReplacement(mCounter++ +"."+ currentNode.getText()); | |
return ReplaceAction.REPLACE; | |
} | |
} |