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

