Решение 1. Повторное использование текста, присутствующего во входной строке
Поскольку текст, который вы хотите заменить, фактически присутствует в исходном тексте, вы можете (ab) использовать группы захвата здесь следующим образом:
DTE.Find.FindWhat = "Container\(""\w+""\)\.(?:(?<f>T)e(?<s>xt)Ctrls|(?<f>L)a(?<s>b)e(?<t>l)Ctrls)\(""(?<ControlName>\w+)""\).Text"
DTE.Find.ReplaceWith = "${f}${s}${t}NameOfControl.Text"
См. Демоверсию .NET
Группы f
, s
и t
заполняются необходимыми битами текста и имеют текст, только если соответствующие альтернативы совпадают.
Решение 2. Использование MatchEvaluator
для пользовательской логики замены
Вы можете использовать MatchEvaluator
, чтобы проверить, какая группа соответствует или какое значение группы, а затем реализовать собственную логику замены:
Dim s As String = "Container(""Name1"").TextCtrls(""Name2"").Text" & vbCrLf & "Container(""Name1"").LabelCtrls(""Name2"").Text"
Dim pattern As String = "Container\(""\w+""\)\.(?<test>TextCtrls|LabelCtrls)\(""(?<ControlName>\w+)""\).Text"
Dim result = Regex.Replace(s, pattern, New MatchEvaluator(Function(m As Match)
If m.Groups("test").Value = "TextCtrls" Then
Return "TxtNameOfControl.Text"
Else
Return "LblNameOfControl.Text"
End If
End Function))
Выход: