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 中使用正则表达式查找和替换?