我想匹配术语"TextCtrls“和"LabelCtrls”。当我找到"TextCtrls“时,我想用"Txt”代替,当我找到"LabelControls“时,我想用"Lbl”代替。在线演示
可以用DTE.Find.ReplaceWith?实现吗?
DTE.Find.FindWhat = "Container\(""\w+""\)\.(?:TextCtrls|LabelCtrls)\(""(?<ControlName>\w+)""\).Text"
DTE.Find.ReplaceWith = "<psydocode:Txt|Lbl>${ControlName}.Text"发布于 2018-11-06 15:10:47
解决方案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 regex演示
组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))输出:

https://stackoverflow.com/questions/53173994
复制相似问题