Visual Studio正则表达式匹配重复的字符串

时间:2015-07-08 13:20:47

标签: c# regex visual-studio

使用Visual Studio(2012)查找并替换正则表达式,如何匹配可能重复的多个元素序列(而不仅仅是重复的单个字符)?

具体来说,我试图在公共void方法中找到属性(MyAttribute)的用法,其中可能存在多行。例如,我想找到两个:

[MyAttribute]
public void Method1()

[MyAttribute]
[AnotherAttribute]
//A comment
public void Method2()

我可以通过以下方式找到第一个案例:

MyAttribute.*\r?\npublic void

但我不知道如何指定中间可能有多行的更一般情况。我试过了:

MyAttribute(.*\r?\n)*public void

但这会让我的VS挂起。

3 个答案:

答案 0 :(得分:1)

您可以使用

(?m)^(?:[\s\r]*(?:\[[^]]*\]|//.*)[\s\r]*)+public\s+void[^(]*?\(.*?\)

它会匹配所有评论和[sometext] - 与public void something(something...)后面的行匹配。

VS2012中一个非常奇怪的故障是匹配换行符:\s通常匹配\r\n,但在VS2012中,我们需要手动添加\r一个[\s\r]个字符类。

请参阅demo

enter image description here

答案 1 :(得分:1)

使用反射:

    INSERT INTO ebdb.requestaction(RequestID,
                                   ActionID,
                                   TransactionID,
                                   IsActive,
                                   IsComplete)
       VALUES (
                 1,
**Dynamic Value from Below Query,
Dynamic Value from Below Query,**
                1,
                 0);

您可以调整如何获得装配。 这将获取程序集上的所有类型,然后是所有方法,然后将其过滤为具有MyAttribute类型的公共类型,并且没有参数。

答案 2 :(得分:0)

  

使用Visual Studio(2012)正则表达式...   ...搜索特定的内容(例如MyAttribute),然后搜索一个或多个   完整或空行,然后是另一个特定的字符串

在Visual Studio中使用此

\[MyAttribute\][\s\r\n\W\w]+?public

基本上说找到特定字符串" [MyAttribute]"然后为一个或多个(前面的字符项){{1}找到任何空格或制表符\s,回车,换行符,\r\n,非单词和单词项\W\w },然后尽可能少(最小)+直到它找到特定的单词" public"。

这里正在运行

enter image description here

更新

? = \S - \W\w表示任何非空白字符。

因此可以缩短模式,例如

\S

公共虚空更新

将模式更改为

\[MyAttribute\][\s\r\n\S]+?public

只能找到" public void"。