Εύρεση και Αντικατάσταση

Εύρεση και Αντικατάσταση

Εύρεση και Αντικατάσταση

Aspose.Words FOSS για .NET παρέχει αντικατάσταση βασισμένη σε εκφράσεις κανονικής μορφής μέσω Range.Replace(), ρυθμιζόμενη μέσω FindReplaceOptions και, για προχωρημένα σενάρια, μια προσαρμοσμένη υλοποίηση IReplacingCallback από το χώρο ονομάτων Aspose.Words.Replacing.


Βασική Εύρεση και Αντικατάσταση

Range.Replace(pattern, replacement) εκτελεί αναζήτηση και αντικατάσταση με εκφράσεις κανονικής μορφής σε όλο το εύρος — ολόκληρο το έγγραφο, όταν κληθεί σε Document.Range. Η υπερφόρτωση Replace(pattern, replacement, options) δέχεται ένα αντικείμενο FindReplaceOptions για πιο λεπτομερή έλεγχο: τα MatchCase και FindWholeWordsOnly ρυθμίζουν τη συμπεριφορά του αντιστοίχου, το Direction (μια τιμή FindReplaceDirection, Forward ή Backward) ελέγχει την κατεύθυνση αναζήτησης, και τα ApplyFont / ApplyParagraphFormat επιτρέπουν σε μια αντικατάσταση να μεταφέρει νέα μορφοποίηση αντί μόνο νέου κειμένου.


Επιλογές Ευαισθησίας Μορφοποίησης και Δομικές

FindReplaceOptions περιλαμβάνει αρκετές σημαίες που καθορίζουν ποια δομικά στοιχεία του εγγράφου μπορεί να διασχίσει ή να αγνοήσει μια αντιστοίχηση: τα IgnoreDeleted και IgnoreInserted ελέγχουν αν το περιεχόμενο αλλαγών παρακολούθησης συμμετέχει στην αντιστοίχηση, τα IgnoreFields και IgnoreFieldCodes ελέγχουν αν το κείμενο αποτελέσματος πεδίου και οι κώδικες πεδίου αναζητούνται, το IgnoreFootnotes εξαιρεί το περιεχόμενο υποσημειώσεων/σημειώσεων τέλους, και τα IgnoreStructuredDocumentTags και IgnoreShapes εξαιρούν αντίστοιχα τα ελεγκτικά περιεχομένου και το κείμενο σχήματος. Το UseSubstitutions ενεργοποιεί τη σύνταξη αντικατάστασης με εκφράσεις κανονικής μορφής (όπως το $1) στη συμβολοσειρά αντικατάστασης. Τα LegacyMode και UseLegacyOrder διατηρούν παλαιότερη συμπεριφορά αντιστοίχησης για συμβατότητα με έγγραφα που επεξεργάστηκαν από προηγούμενη λογική.


Προσαρμοσμένη Λογική Αντικατάστασης με IReplacingCallback

Για τη λογική αντικατάστασης που δεν μπορεί να εκφραστεί ως σταθερή συμβολοσειρά αντικατάστασης, υλοποιήστε το IReplacingCallback και τη μοναδική του μέθοδο Replacing(args), στη συνέχεια εκχωρήστε την υλοποίηση στο FindReplaceOptions.ReplacingCallback (ή περάστε την απευθείας στον κατασκευαστή FindReplaceOptions(replacingCallback)). Η κλήση επιστροφής (callback) λαμβάνει ένα αντικείμενο ReplacingArgs για κάθε αντιστοίχηση, εκθέτοντας το Match (η υποκείμενη αντιστοίχηση κανονικής έκφρασης), το MatchNode / MatchEndNode (οι κόμβοι του εγγράφου που περιέχουν την αντιστοίχηση), το MatchOffset, και μια ρυθμιζόμενη συμβολοσειρά Replacement. Η επιστροφή μιας τιμής ReplaceAction από το callback — Replace, Skip ή Stop — ελέγχει αν η συγκεκριμένη αντιστοίχηση θα αντικατασταθεί, θα παραμείνει αμετάβλητη ή θα διακόψει ολόκληρη τη λειτουργία εύρεσης/αντικατάστασης.


Συμβουλές και Καλές Πρακτικές

  • Κλήστε το Replace() στο Document.Range για αντικατάσταση σε όλο το έγγραφο, ή σε ένα πιο περιορισμένο Range (όπως το εύρος μιας μοναδικής ενότητας) για να περιορίσετε τη λειτουργία.
  • Ορίστε το FindWholeWordsOnly = true ώστε να αποτρέψετε την αντιστοίχηση ενός όρου αναζήτησης ως υποσυμβολοσειρά μιας μεγαλύτερης λέξης.
  • Χρησιμοποιήστε το IgnoreFieldCodes = true όταν θέλετε η αντικατάσταση να λειτουργεί στα εμφανιζόμενα αποτελέσματα πεδίου, όχι στο υποκείμενο κείμενο εντολής πεδίου.
  • Προτιμήστε το IReplacingCallback αντί για μετα-επεξεργασία όταν το κείμενο αντικατάστασης εξαρτάται από το πλαίσιο της αντιστοίχησης (γειτονικός κόμβος, μορφοποίηση ή θέση) αντί να είναι σταθερή συμβολοσειρά.
  • Επιστρέψτε το ReplaceAction.Stop από μια κλήση επιστροφής για να τερματίσετε νωρίς τη λειτουργία εύρεσης/αντικατάστασης μόλις ικανοποιηθεί μία συνθήκη, αντί να επεξεργαστείτε κάθε υπόλοιπη αντιστοίχηση.

Συνηθισμένα Προβλήματα

ΠρόβλημαΑιτίαΔιόρθωση
Η αντικατάσταση δεν εφαρμόζει νέα μορφοποίησηApplyFont/ApplyParagraphFormat δεν έχει οριστεί στο FindReplaceOptionsΟρίστε τις σχετικές ιδιότητες μορφοποίησης στο αντικείμενο options
Βρέθηκαν αντιστοιχίες μέσα σε διαγραφές παρακολουθούμενων αλλαγών απροσδόκηταIgnoreDeleted παρέμεινε στην προεπιλογή τουΟρίστε το IgnoreDeleted = true για να παραλείψετε το διαγραμμένο περιεχόμενο αναθεώρησης
Οι αναφορές ομάδων regex στο κείμενο αντικατάστασης δεν αντικαθίστανταιUseSubstitutions δεν είναι ενεργοποιημένοΟρίστε το UseSubstitutions = true για να ενεργοποιήσετε αντικατάσταση τύπου $1
Η αντικατάσταση βασισμένη σε callback δεν σταματά όταν αναμένεταιΤο callback επιστρέφει Replace/Skip αντί για StopΕπιστρέψτε το ReplaceAction.Stop από το Replacing() όταν η λειτουργία πρέπει να τελειώσει

FAQ

Το Range.Replace() υποστηρίζει κανονικές εκφράσεις;

Ναι — το όρισμα pattern είναι μια κανονική έκφραση, που ταιριάζει με το κείμενο του εύρους.

Πώς μπορώ να αντικαταστήσω κείμενο μόνο μέσα σε συγκεκριμένο τμήμα, όχι σε ολόκληρο το έγγραφο;

Καλέστε το Replace() στο Range του τμήματος αυτού αντί για το Document.Range.

Πώς μπορώ να κάνω το κείμενο αντικατάστασης εξαρτώμενο από το τι ταιριάστηκε;

Εφαρμόστε το IReplacingCallback, διαβάστε τις λεπτομέρειες της αντιστοίχισης από το ReplacingArgs, ορίστε το ReplacingArgs.Replacement στο υπολογισμένο κείμενο και επιστρέψτε το ReplaceAction.Replace.

Μπορεί η αναζήτηση εύρεσης/αντικατάστασης να γίνει προς τα πίσω μέσα στο έγγραφο;

Ναι — ορίστε το FindReplaceOptions.Direction σε FindReplaceDirection.Backward.


API Reference Περίληψη

Κλάση / ΜέθοδοςΠεριγραφή
Range.Replace()Αναζήτηση/αντικατάσταση με κανονική έκφραση σε εύρος, με προαιρετικό FindReplaceOptions
FindReplaceOptionsΔιαμορφώνει τη συμπεριφορά αντιστοίχισης, τη μορφοποίηση και το δομικό πεδίο για λειτουργίες αντικατάστασης
FindReplaceDirectionΑπαρίθμηση: Forward, Backward
IReplacingCallbackΔιεπαφή για προσαρμοσμένη λογική αντικατάστασης ανά αντιστοίχιση
ReplacingArgsΔεδομένα ανά αντιστοίχιση που μεταβιβάζονται στο IReplacingCallback.Replacing()
ReplaceActionEnum που ελέγχει το αποτέλεσμα ανά αγώνα: Replace, Skip, Stop

Δείτε επίσης

 Ελληνικά