That would be the principle. However you could use wildcards with minimal iterations in a macro using wildcards
Replace using wildcards e.g.
Code:
Sub Macro1()
Const sFind As String = "<ah[\!\?\,.]{1,}|<AH[\!\?\,.]{1,}|<Ah[\!\?\,.]{1,}"
Const sRepl As String = "^&"
Dim oRng As Range
Dim vFind As Variant
Dim i As Integer
vFind = Split(sFind, "|")
For i = 0 To UBound(vFind)
Set oRng = ActiveDocument.Range
With oRng.Find
Do While .Execute(findText:=vFind(i), _
MatchWildcards:=True, _
ReplaceWith:=sRepl)
oRng.Font.Italic = True
oRng.Collapse 0
Loop
End With
Next i
End Sub