C#快速查找并高亮Word文檔中的文字(普通查找+正則表達式)
引言
在日常辦公自動化、文檔審核或數(shù)據提取場景中,我們經常需要在大量的 Word 文檔中定位特定的關鍵詞或符合某種模式的文本,并將其高亮顯示以便快速查閱。雖然 Microsoft Office Interop 可以實現(xiàn)這一功能,但它依賴本地安裝的 Office 環(huán)境,且在服務器端運行時常遇到穩(wěn)定性和權限問題。
事實上,在 C# 中,除了依賴本地 Office 的 Interop 方案外,還可以使用 Free Spire.Doc for .NET 這類免費獨立組件來實現(xiàn)文本的查找與高亮功能。這種方式無需在運行環(huán)境中安裝 Microsoft Word,適合服務器端或自動化場景。本文將通過兩個具體示例,分別演示如何利用該庫進行普通字符串查找和正則表達式模式匹配的高亮實現(xiàn)。
環(huán)境準備
首先,你需要在項目中引入 Free Spire.Doc 庫。你可以通過 NuGet 包管理器安裝:
Install-Package FreeSpire.Doc
或者從官方網站下載庫文件,并手動添加引用。
示例一:查找特定字符串并高亮
假設我們有一份關于文學理論的 Word 文檔 (??輸入.docx??),我們需要找到其中所有的“超驗主義”一詞,并將它們標記為黃色高亮。
核心代碼邏輯
- 加載 Word 文檔。
- 使用 ?
?FindAllString?? 方法查找所有匹配項。 - 遍歷結果,將每個匹配項的 ?
?HighlightColor?? 設置為黃色。 - 保存新文檔。
完整代碼
using System;
using System.Drawing;
using Spire.Doc;
using Spire.Doc.Documents;
namespace FindHighlightSimple
{
class Program
{
static void Main(string[] args)
{
// 1. 創(chuàng)建 Document 實例
Document document = new Document();
// 2. 加載示例 Word 文檔
// 請確保當前目錄下存在 輸入.docx 文件
document.LoadFromFile("輸入.docx");
Console.WriteLine("正在查找文本 '超驗主義' ...");
// 3. 查找所有匹配的文本
// 參數(shù)說明:
// "超驗主義": 要查找的字符串
// false: 不區(qū)分大小寫 (若為 true 則區(qū)分)
// true: 全字匹配 (若為 true 則只匹配完整單詞,避免匹配到包含該詞的其他詞)
TextSelection[] textSelections = document.FindAllString("超驗主義", false, true);
Console.WriteLine($"共找到 {textSelections.Length} 處匹配項。");
// 4. 遍歷所有匹配項并設置高亮顏色
foreach (TextSelection selection in textSelections)
{
// GetAsOneRange() 將選區(qū)轉換為一個文本范圍對象
// CharacterFormat 允許我們修改字體、顏色、高亮等屬性
selection.GetAsOneRange().CharacterFormat.HighlightColor = Color.Yellow;
}
// 5. 保存結果文件
string outputPath = "高亮結果.docx";
document.SaveToFile(outputPath, FileFormat.Docx);
Console.WriteLine($"處理完成!結果已保存至:{outputPath}");
// 可選:自動打開生成的文件
// System.Diagnostics.Process.Start(outputPath);
}
}
}
代碼解析
- ?
?FindAllString???: 這是 Spire.Doc 提供的最直接的查找方法。它返回一個 ??TextSelection?? 數(shù)組,每個元素代表文檔中找到的一處匹配內容。 - ?
?selection.GetAsOneRange() ??: 查找到的內容可能跨越多個段落或格式塊,此方法將其視為一個連續(xù)的文本范圍,方便統(tǒng)一設置格式。 - ?
?CharacterFormat.HighlightColor???: 直接調用 .NET 的 ??System.Drawing.Color?? 枚舉來設置高亮色,支持 ??Color.Red??, ??Color.Green??等 Word 中的標準高亮顏色。
示例二:使用正則表達式查找并高亮復雜模式
在實際應用中,我們要查找的往往不是固定的字符串,而是符合某種規(guī)則的文本。例如,文檔中包含許多類似 ??[Name]??, ??[Date]??, ??[ID_123]?? 這樣的占位符,我們需要將它們全部找出來并高亮,以便后續(xù)替換或檢查。
這時,正則表達式(Regex)就派上用場了。Free Spire.Doc 支持通過 ??FindAllPattern?? 方法進行正則匹配。
場景描述
我們需要查找文檔中所有格式為 ??[單詞]?? 的占位符(例如 ??[Username]??, ??[Address]??),并將它們高亮顯示為綠色。
核心代碼邏輯
- 定義正則表達式 ?
?@[\w+]?? 來匹配方括號內的單詞。 - 使用 ?
?FindAllPattern?? 方法執(zhí)行查找。 - 遍歷結果,設置高亮顏色為綠色。
完整代碼
using System;
using System.Drawing;
using System.Text.RegularExpressions;
using Spire.Doc;
using Spire.Doc.Documents;
namespace FindHighlightRegex
{
class Program
{
static void Main(string[] args)
{
// 1. 創(chuàng)建 Document 實例
Document document = new Document();
// 2. 加載包含占位符的 Word 文檔
document.LoadFromFile("模板.docx");
Console.WriteLine("正在使用正則表達式查找占位符...");
// 3. 定義正則表達式
// 解釋:
// [ : 匹配左方括號 '[' (需要轉義)
// \w+ : 匹配一個或多個字母、數(shù)字或下劃線
// ] : 匹配右方括號 ']' (需要轉義)
Regex regex = new Regex(@"[\w+]", RegexOptions.IgnoreCase);
// 4. 查找所有符合正則模式的文本
TextSelection[] selections = document.FindAllPattern(regex);
Console.WriteLine($"共找到 {selections.Length} 個占位符。");
// 5. 遍歷并高亮
foreach (TextSelection selection in selections)
{
// 獲取匹配到的具體文本內容,可用于日志記錄或進一步處理
string matchedText = selection.GetAsOneRange().Text;
Console.WriteLine($" - 發(fā)現(xiàn)占位符: {matchedText}");
// 設置高亮顏色為淺綠色
selection.GetAsOneRange().CharacterFormat.HighlightColor = Color.LightGreen;
// 進階:同時也可以修改字體加粗,使其更明顯
selection.GetAsOneRange().CharacterFormat.Bold = true;
}
// 6. 保存結果
string outputPath = "正則高亮.docx";
document.SaveToFile(outputPath, FileFormat.Docx);
Console.WriteLine($"\n處理完成!結果已保存至:{outputPath}");
}
}
}
正則表達式詳解
?@"[\w+]"??:
- ?
?@?? 符號表示逐字字符串,避免反斜杠轉義問題。 - ?
?[?? 和 ??]?? 分別匹配字符 ??[?? 和 ??]??。因為在正則中方括號有特殊含義,所以需要轉義。 - ?
?\w+?? 匹配中間的“單詞”內容。 - ?
?RegexOptions.IgnoreCase??: 忽略大小寫,這樣 ??[NAME]?? 和 ??[name]?? 都能被匹配到。
擴展思路
你可以輕松修改正則表達式以適應更多場景:
- 查找日期格式:?
?@\d{4}-\d{2}-\d{2}?? (匹配 2023-10-01) - 查找郵箱地址:?
?@\w+@\w+.\w+?? - 查找特定前綴的變量:?
?@$[A-Za-z]+?? (匹配 $Variable)
常見問題與注意事項
1. 命名空間引用
確保你的文件頭部包含了必要的引用:
using Spire.Doc; using Spire.Doc.Documents; using System.Drawing; // 用于顏色 using System.Text.RegularExpressions; // 用于正則
2. 性能考量
對于幾百頁的大型文檔,??FindAllString?? 和 ??FindAllPattern?? 的性能表現(xiàn)依然優(yōu)秀。但如果在循環(huán)中進行大量其他復雜操作,建議先測試內存占用。
總結
通過本文的兩個示例,我們展示了如何利用 C# 和 Spire.Doc 庫高效地處理 Word 文檔中的文本高亮需求:
- 簡單查找:使用 ?
?FindAllString?? 快速定位固定關鍵詞,適用于拼寫檢查、術語標記等場景。 - 正則查找:使用 ?
?FindAllPattern?? 配合正則表達式,靈活應對占位符、日期、郵箱等復雜模式的批量處理。
這種方法完全擺脫了對 Microsoft Office 軟件的依賴,代碼簡潔,運行穩(wěn)定,非常適合集成到 ASP.NET 后臺服務、Windows 桌面應用或自動化腳本中。
以上就是C#快速查找并高亮Word文檔中的文字(普通查找+正則表達式)的詳細內容,更多關于C#查找并高亮Word文字的資料請關注腳本之家其它相關文章!
相關文章
快速了解如何在.NETCORE中使用Generic-Host建立主機
這篇文章主要介紹了如何在.NETCORE中使用Generic-Host建立主機,文中代碼非常詳細,可供大家參考,感興趣的朋友不妨閱讀完2020-05-05
C# 中的動態(tài)創(chuàng)建組件(屬性及事件)的實現(xiàn)思路及方法
這篇文章主要介紹了C# 中的動態(tài)創(chuàng)建組件,有需要的朋友可以參考一下2013-12-12

