首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReplaceWith条件DTE

ReplaceWith条件DTE
EN

Stack Overflow用户
提问于 2018-11-06 14:32:04
回答 1查看 69关注 0票数 2

我想匹配术语"TextCtrls“和"LabelCtrls”。当我找到"TextCtrls“时,我想用"Txt”代替,当我找到"LabelControls“时,我想用"Lbl”代替。在线演示

可以用DTE.Find.ReplaceWith?实现吗?

代码语言:javascript
复制
DTE.Find.FindWhat = "Container\(""\w+""\)\.(?:TextCtrls|LabelCtrls)\(""(?<ControlName>\w+)""\).Text"

DTE.Find.ReplaceWith = "<psydocode:Txt|Lbl>${ControlName}.Text"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-06 15:10:47

解决方案1:重用输入字符串中的文本

由于要替换的文本实际上存在于源文本中,因此您可以(Ab)在这里以以下方式使用捕获组:

代码语言:javascript
复制
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演示

fst都填充了必要的文本位,并且只有在相应的备选方案匹配时才有文本。

解决方案2:使用MatchEvaluator进行自定义替换逻辑

您可以使用MatchEvaluator来检查哪个组匹配或什么组值,然后实现您自己的替换逻辑:

代码语言:javascript
复制
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))

输出:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53173994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档