חיפוש והחלפה
חיפוש והחלפה
Aspose.Words FOSS for .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)). הפונקציה הישירה מקבלת אובייקט ReplacingArgs עבור כל התאמה, חושפת את Match (התאמת הביטוי הרגולרי הבסיסית), MatchNode / MatchEndNode (צמתי המסמך המכילים את ההתאמה), MatchOffset, ו-מחרוזת Replacement שניתנת להגדרה. החזרת ערך ReplaceAction מהפונקציה — Replace, Skip או Stop — שולטת האם ההתאמה המסוימת מוחלפת, נשארת ללא שינוי, או עוצרת את כל פעולת החיפוש/החלפה.
טיפים ושיטות עבודה מומלצות
- הפעל
Replace()עלDocument.Rangeלהחלפה ברמת כל המסמך, או עלRangeמצומצם יותר (כגון טווח של קטע יחיד) כדי למקד את הפעולה. - הגדר את
FindWholeWordsOnly = trueכדי למנוע התאמת מונח חיפוש כתת-מחרוזת של מילה ארוכה יותר. - השתמש ב-
IgnoreFieldCodes = trueכאשר אתה רוצה שההחלפה תפעל על תוצאות השדה המוצגות, ולא על הטקסט המודריך של השדה הבסיסי. - העדף את
IReplacingCallbackעל פני עיבוד לאחרי כאשר טקסט ההחלפה תלוי בהקשר ההתאמה (צומת סביבתית, עיצוב או מיקום) ולא במחרוזת קבועה. - החזר את
ReplaceAction.Stopמפונקציית-callback כדי לסיים את פעולת החיפוש/החלפה מוקדם כאשר תנאי מתקיים, במקום לעבד כל התאמה שנשארה.
בעיות נפוצות
| בעיה | סיבה | תיקון |
|---|---|---|
| ההחלפה אינה מחילה עיצוב חדש | ApplyFont/ApplyParagraphFormat לא הוגדר ב-FindReplaceOptions | הגדר את מאפייני העיצוב הרלוונטיים על אובייקט options |
| התאמות נמצאו בתוך מחיקות של שינוי במעקב באופן בלתי צפוי | IgnoreDeleted נשאר בערך ברירת המחדל | הגדר אתIgnoreDeleted = trueכדי לדלג על תוכן גרסה שנמחק |
| הפניות לקבוצות Regex בטקסט ההחלפה לא מוחלפות | UseSubstitutions אינו מופעל | הגדר UseSubstitutions = true כדי להפעיל החלפה בסגנון $1 |
| ההחלפה מבוססת-קריאה חוזרת אינה נעצרת כאשר מצופה | הקריאה החוזרת מחזירה 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 | Enum: Forward, Backward |
IReplacingCallback | ממשק ללוגיקה מותאמת אישית של החלפה לכל התאמה |
ReplacingArgs | נתונים לכל התאמה המועברים ל-IReplacingCallback.Replacing() |
ReplaceAction | Enum שמגדיר את תוצאת כל התאמה: Replace, Skip, Stop |