正则表达式来查找String.Compare与两个参数

时间:2019-07-04 21:47:41

标签: c# regex notepad++

我正在寻找代码中忘记忘记为第三个参数添加'true'的实例,这使其不区分大小写。

代码看起来像String.Compare("stringA", varB)String.Compare(varA, "stringB", true),而我想使用regex查找仅使用两个参数的情况的所有实例。

到目前为止,我想到了:String.Compare\([^,\n]*((,[^,\n]*?))\),它适用于简单的情况,但是我不确定如何处理诸如参数末尾带有.ToString()之类的东西。

如果有人对我如何改善我的正则表达式有任何建议,甚至对我的问题有完全不同但更有效的解决方案,那就太好了!

编辑:只是想提一下,有时它可能分成不同的行:

if (String.Compare(varA.ToString(),
varB.ToString().Trim(),
StringComparison.OrdinalIgnoreCase) != 0)

3 个答案:

答案 0 :(得分:0)

可能需要改进一些地方。如果不需要捕获组,则可以忽略它们,将它们变成非捕获(?:。还有一个双重捕获组((,您可以在其中省略外部捕获组。

您可以在String.之后转义点,否则它将匹配除换行符以外的任何字符。

在否定的字符类中,您不匹配,\n,但是如果没有右括号,您也可以像[^,\n)]一样将其添加到括号中。

您也可以删除[^,\n]*?之后的问号,以免贪婪。

您的表情可能像这样:

String\.Compare\([^,\n)]*(?:,[^,\n)]*)\)

如果要匹配所有以点开头的非空格字符,则可以添加一个可选的非捕获组:

String\.Compare\([^,\n)]*(?:,[^,\n)]*)\)(?:\.\S+)?

如果String不应该是较大单词的一部分,则可以在单词边界\bString之前加上

Regex demo

答案 1 :(得分:0)

这应该可行,并且不要忘记忽略大小写:

String\.Compare\([^,]*(?:,[^,()]*)(\(\))?\);$

答案 2 :(得分:0)

假设这是一项一次性任务,那么我将使用Notepad ++分几步来完成它。

  1. 标记所有包含String.Compare的行。使用“查找和替换”对话框的“标记”选项卡,确保选中“书签行”。
  2. 反向书签。使用菜单=>搜索=>书签=>反向书签。现在,所有不包含String.Compare的行都被标记。
  3. 使用正则表达式String\.Compare\([^,\n]*,[^,\n]*, *true\);$进行标记行。这会在具有所需true的字符串比较行上添加标记。注意正则表达式中的最后一个;$。它确保true确实是调用的第三个参数,并且与该行前面的true不匹配。 \.ToString()子句不需要任何额外的内容
  4. 反向书签。
  5. 现在在所有String.Compare行上都没有标记,而这些标记没有将通缉的true作为行上的第三个参数。

总结一下:查找(并标记)确定的行,然后反转标记以突出显示可能需要注意的行。

为响应已更改的问题,将步骤3中的正则表达式更改为 String\.Compare\([^,]*,[^,]*,\s*true\)(\s*!=\s*0\))?$ 甚至 String\.Compare\([^,]*,[^,]*,\s*StringComparison\.\w+\)(\s*!=\s*0\))?$

此更改允许第三个参数为StringComparison枚举,并且还可以将比较结果与零进行比较。

将正则表达式更改为String\.Compare\([^,]*,[^,]*,\s*(true|StringComparison\.\w+)\)(\s*!=\s*0\))?$应该允许trueStringComparison枚举作为第三个参数。通常,我反对使用这种复杂的正则表达式。他们变得难以理解和难以增强。对于诸如此问题中的任务以及此答案中给出的解决方案的样式,最好在上面的步骤3中执行两个或多个使用不同表达式的标记行运算。