C#Regex - 匹配不以特定单词开头的表达式

时间:2018-02-15 15:07:00

标签: c# regex replace find

我已经阅读过类似的问题,但我无法解决这个问题。我想将正则表达式用于支持C#正则表达式的Find-Replace Visual Studio工具。

我想找到(并且没有替换)表达式,例如:

System.Collections.Generic.List
System.Web.UI.WebControls.Button

然后移除System.Collections.Generic.System.Web.UI.WebControls以整理我的代码。

但我希望能够在'系统'之后添加新单词。表达式,如果我想缩放它。所以我创造了这个:

(System\.)?(Collections\.)?(Generic\.)?(Web\.)?(UI\.)?(WebControls\.)?

但是,这也会使用以下语句进行更改:

using System.Data.SqlClient;

有没有办法改变我的正则表达式,使其不包含以“using”关键字开头的匹配项?

我尝试过使用:

(^?!using)(System\.)?(Collections\.)?(Generic\.)?(Web\.)?(UI\.)?(WebControls\.)?

但这不起作用。谢谢!

2 个答案:

答案 0 :(得分:1)

使用负向lookbehind,断言匹配不在endpoints.cors.*

之前

(?<!^using )

但是,由于所有部分都是可选的,因此它将匹配

中的using 
Collections.

这可能是不想要的,也有很多正则表达式引擎有限制,lookbehinds不能有可变长度匹配。

答案 1 :(得分:0)

您拥有的语法将允许部分匹配。尝试指定&#34;使用&#34;必须出现0次。 ^(使用){0}

如果这不起作用,您可以执行以下操作: 1.使用system&#34;查找和替换&#34;与&#34; usingsistem&#34;。 2.查找并替换system.whatever。 3.查找并替换&#34; usingsistem&#34;用&#34;使用系统&#34;