Using replace evaluators might be a nice solution then. Here's a sample code for your document:
public void TestToa()
{
Document doc = new Document(@"D:\Work\TOA.doc");
InsertToa(doc, @"Prescott v\. Leaf River Forest Prods\., Inc\., 740 So\. 2d 301, 311");
InsertToa(doc, @"Harris v\. Owens-Corning Fiberglass Corp\., 102 F\.3d 1429 \(7th Cir\. 1996\)");
InsertToa(doc, @"Munford, Inc\. v\. Fleming\, 597 So\. 2d 1282, 1284 \(Miss\. 1992\)");
doc.Save(@"D:\Work\TOA Out.doc");
}
private void InsertToa(Document doc, string pattern)
{
doc.Range.Replace(new Regex(pattern), new ReplaceEvaluator(InsertToaEvaluator), true);
}
private ReplaceAction InsertToaEvaluator(object sender, ReplaceEvaluatorArgs e)
{
DocumentBuilder builder = new DocumentBuilder(e.MatchNode.Document);
builder.MoveTo(e.MatchNode.NextSibling);
builder.InsertField(@" TOA \* MERGEFORMAT ", "");
return ReplaceAction.Skip;
}
In practice, the task might require some additional actions as the text to find is not necessarily contained in one Run. So if you want to insert the field right after a text fragment, you might have a need to move to one of the next runs using NextSibling or maybe split the last run that is covered by the text into two runs. However, the base techinque should be now clear. If it isn't, don't hesitate to post your further questions here.