Replace text using regular expressions in MS Word - C#
c#, ms-word, regex
Solution
MS Word has a wildcard matching capability built in. It's not as powerful as regular expressions, but it looks like it's able to match simple patterns like social security numbers.
(The < and > wildcards match start and end word boundaries.)
_wordApp.Selection.Find.ClearFormatting();
_wordApp.Selection.Find.MatchWildcards = true;
_wordApp.Selection.Find.Text = "<[0-9]{3}-[0-9]{2}-[0-9]{4}>"; // SSN with dashes.
_wordApp.Selection.Find.Replacement.ClearFormatting();
_wordApp.Selection.Find.Replacement.Text = "test";
_wordApp.Selection.Find.ClearFormatting();
_wordApp.Selection.Find.MatchWildcards = true;
_wordApp.Selection.Find.Text = "<[0-9]{9}>"; // SSN without dashes.
_wordApp.Selection.Find.Replacement.ClearFormatting();
_wordApp.Selection.Find.Replacement.Text = "test";
Problem
I have a Word document that I want to open and replace all instances of a social security number with the word, "test". I already have the code to open the document. Here's the code that would do the replacement. However, I'm having trouble with using regular expressions at this point: _wordApp.Selection.Find.Text = ; within my code. Is using regular expressions a good approach or is there a better approach? Bear in mind, I have to match any social security number... hence: \b[0-9]{3}-[0-9]{2}-[0-9]{4}\b OR \b[0-9]{3}[0-9]{2}[0-9]{4}\b Thanks in advance... ``` object replaceAll = Werd.WdReplace.wdReplaceAll; _wordApp.Selection.Find.ClearFormatting(); _wordApp.Selection.Find.Text = ; _wordApp.Selection.Find.Replacement.ClearFormatting(); _wordApp.Selection.Find.Replacement.Text = "test"; _wordApp.Selection.Find.Execute(ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref replaceAll, ref nullobj, ref nullobj, ref nullobj, ref nullobj); ```