Visual Studio 使用正则表达式查找无重复项

Posted

技术标签:

【中文标题】Visual Studio 使用正则表达式查找无重复项【英文标题】:Visual studio find with regex without duplicates 【发布时间】:2021-08-10 11:19:51 【问题描述】:

假设我有一个接受字符串的函数,所以在代码中它被称为:

myObject.AddMyString("Something")

我想搜索整个解决方案并找到.AddMyString() 函数的所有调用,但我不想多次看到与参数相同的字符串。 如果我搜索:.AddMyString\(".*"\) 并且当我传递确切的字符串“Something”时有很多地方,那么当按下 find next 时,它会显示许多类似的地方。我只想查看在代码中传递给此函数的所有唯一字符串。

@Edit:我认为我的问题已经足够清楚了。

假设我有这样的代码:

var myObject = new MyClass();

myObject.AddMyString("Test");
myObject.AddMyString("Computer");
myObject.AddMyString("Printer");

[...]

myObject.AddMyString("Scanner");
myObject.AddMyString("Test");

[...]

myObject.AddMyString("Computer");
myObject.AddMyString("Speakers");

我想使用正则表达式,这样我就只有 5 个匹配项。它只会匹配第一次出现的“Test”或“Computer”字符串。

当我使用正则表达式 .AddMyString\(".*"\) 时,它会找到 7 个匹配项而不是 5 个。

【问题讨论】:

我认为您需要为此使用无限环顾,例如:***.com/a/45995312/4122889 事实上,当我针对您的样本进行测试时,特定的正则表达式已经达到了您想要的 90%。 使用“AddMyString”搜索将结果复制到文件中,使用“Set”方法迭代该文件,以仅保留每个字符串文件的第一个唯一结果 【参考方案1】:

使用

(\.AddMyString\(".*?"\))(?![\s\S\r]*\1)

见proof。

解释

--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    \.                       '.'
--------------------------------------------------------------------------------
    AddMyString              'AddMyString'
--------------------------------------------------------------------------------
    \(                       '('
--------------------------------------------------------------------------------
    "                        '"'
--------------------------------------------------------------------------------
    .*?                      any character except \n (0 or more times
                             (matching the least amount possible))
--------------------------------------------------------------------------------
    "                        '"'
--------------------------------------------------------------------------------
    \)                       ')'
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  (?!                      look ahead to see if there is not:
--------------------------------------------------------------------------------
    [\s\S\r]*                any character of: whitespace (\n, \r,
                             \t, \f, and " "), non-whitespace (all
                             but \n, \r, \t, \f, and " "), '\r'
                             (carriage return) (0 or more times
                             (matching the most amount possible))
--------------------------------------------------------------------------------
    \1                       what was matched by capture \1
--------------------------------------------------------------------------------
  )                        end of look-ahead

【讨论】:

以上是关于Visual Studio 使用正则表达式查找无重复项的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 中使用正则表达式查找和替换?

Visual Studio 使用正则表达式查找无重复项

在 Visual Studio 中使用正则表达式

Visual Studio 2013包括逻辑或“在文件中查找”

Visual Studio统计代码行数

Visual Studio Code-批量在文末添加文本字段