当使用VS 2015搜索和放大器时,如何让我的正则表达式捕获组停止排除部分字符串?更换?

时间:2017-03-06 18:03:43

标签: regex visual-studio-2015 replace

我想在Visual Studio 2015中为Me._____ Is Nothing执行正则表达式搜索,其中____不包含特定文本。我还想将Me.______ Is Nothing(其中___不包含特定词组)转换为String.IsNullOrWhiteSpace(Me.________)

If Me.Exclude Is Nothing OrElse Not Me.Exclude.Id.HasValue OrElse
    Me.Include1.ToString() Is Nothing OrElse Me.Include2 Is Nothing Then
    ...
End If

我尝试(?!.*ExcludeProperty).*((Me.+?)) Is Nothing[^"],但当我用String.IsNullOrWhiteSpace($1)替换时,我得到了这个:

If Me.Exclude Is Nothing OrElse Not Me.Exclude.Id.HasValue OrElse
String.IsNullOrWhiteSpace(Me.Include2) Then
    ...
End If  

而不是:

If Me.Exclude Is Nothing OrElse Not Me.Exclude.Id.HasValue OrElse
 String.IsNullOrWhiteSpace(Me.Include1.ToString()) OrElse
 String.IsNullOrWhiteSpace(Me.Include2) Then
        ...
End If

如何在我的捕获组中包含Me.Include1

1 个答案:

答案 0 :(得分:1)

你可以使用一个顽固的贪婪令牌:

(Me\.(?:(?!Exclude).)*?) Is Nothing

请参阅regex demo

<强>详情:

  • (Me\.(?:(?!Exclude).)*?) - 第1组在替换模式后面引用$1反向引用,匹配
    • Me\. - 文字字符序列Me.
    • (?:(?!Exclude).)*? - 一个驯化的贪婪令牌,匹配任何char,0或更多重复,尽可能少,不会启动Exclude char序列
  • Is Nothing - 字面字符序列。